soup-cli 0.71.39__tar.gz → 0.71.41__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 (903) hide show
  1. {soup_cli-0.71.39 → soup_cli-0.71.41}/CHANGELOG.md +67 -0
  2. {soup_cli-0.71.39 → soup_cli-0.71.41}/CONTRIBUTING.md +3 -3
  3. {soup_cli-0.71.39 → soup_cli-0.71.41}/PKG-INFO +42 -19
  4. {soup_cli-0.71.39 → soup_cli-0.71.41}/README.md +41 -18
  5. {soup_cli-0.71.39 → soup_cli-0.71.41}/docs/README.md +1 -1
  6. {soup_cli-0.71.39 → soup_cli-0.71.41}/docs/backends-and-ops.md +2 -8
  7. {soup_cli-0.71.39 → soup_cli-0.71.41}/docs/commands.md +8 -0
  8. {soup_cli-0.71.39 → soup_cli-0.71.41}/docs/training.md +56 -0
  9. {soup_cli-0.71.39 → soup_cli-0.71.41}/pyproject.toml +1 -1
  10. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/__init__.py +1 -1
  11. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/cli.py +12 -0
  12. soup_cli-0.71.41/src/soup_cli/commands/reward.py +353 -0
  13. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/config/schema.py +61 -4
  14. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/envs/calculator.py +2 -1
  15. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/envs/guess_number.py +1 -1
  16. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/grpo.py +9 -3
  17. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/rewards.py +41 -0
  18. soup_cli-0.71.41/src/soup_cli/utils/reward_stress.py +190 -0
  19. soup_cli-0.71.41/src/soup_cli/utils/reward_synth.py +716 -0
  20. soup_cli-0.71.41/tests/test_v07140.py +855 -0
  21. soup_cli-0.71.41/tests/test_v07141.py +423 -0
  22. {soup_cli-0.71.39 → soup_cli-0.71.41}/.dockerignore +0 -0
  23. {soup_cli-0.71.39 → soup_cli-0.71.41}/.github/FUNDING.yml +0 -0
  24. {soup_cli-0.71.39 → soup_cli-0.71.41}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  25. {soup_cli-0.71.39 → soup_cli-0.71.41}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  26. {soup_cli-0.71.39 → soup_cli-0.71.41}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  27. {soup_cli-0.71.39 → soup_cli-0.71.41}/.github/pull_request_template.md +0 -0
  28. {soup_cli-0.71.39 → soup_cli-0.71.41}/.github/workflows/ci.yml +0 -0
  29. {soup_cli-0.71.39 → soup_cli-0.71.41}/.github/workflows/docker.yml +0 -0
  30. {soup_cli-0.71.39 → soup_cli-0.71.41}/.github/workflows/publish.yml +0 -0
  31. {soup_cli-0.71.39 → soup_cli-0.71.41}/.github/workflows/recipe-validation.yml +0 -0
  32. {soup_cli-0.71.39 → soup_cli-0.71.41}/.gitignore +0 -0
  33. {soup_cli-0.71.39 → soup_cli-0.71.41}/.mailmap +0 -0
  34. {soup_cli-0.71.39 → soup_cli-0.71.41}/.pre-commit-config.yaml +0 -0
  35. {soup_cli-0.71.39 → soup_cli-0.71.41}/AGENTS.md +0 -0
  36. {soup_cli-0.71.39 → soup_cli-0.71.41}/CODEOWNERS +0 -0
  37. {soup_cli-0.71.39 → soup_cli-0.71.41}/CODE_OF_CONDUCT.md +0 -0
  38. {soup_cli-0.71.39 → soup_cli-0.71.41}/CONTRIBUTORS.md +0 -0
  39. {soup_cli-0.71.39 → soup_cli-0.71.41}/Dockerfile +0 -0
  40. {soup_cli-0.71.39 → soup_cli-0.71.41}/LICENSE +0 -0
  41. {soup_cli-0.71.39 → soup_cli-0.71.41}/NOTICE +0 -0
  42. {soup_cli-0.71.39 → soup_cli-0.71.41}/SECURITY.md +0 -0
  43. {soup_cli-0.71.39 → soup_cli-0.71.41}/docker-compose.yml +0 -0
  44. {soup_cli-0.71.39 → soup_cli-0.71.41}/docs/adapters-and-governance.md +0 -0
  45. {soup_cli-0.71.39 → soup_cli-0.71.41}/docs/compliance.md +0 -0
  46. {soup_cli-0.71.39 → soup_cli-0.71.41}/docs/data.md +0 -0
  47. {soup_cli-0.71.39 → soup_cli-0.71.41}/docs/evaluation.md +0 -0
  48. {soup_cli-0.71.39 → soup_cli-0.71.41}/docs/models.md +0 -0
  49. {soup_cli-0.71.39 → soup_cli-0.71.41}/docs/peft-and-efficiency.md +0 -0
  50. {soup_cli-0.71.39 → soup_cli-0.71.41}/docs/performance-and-quantization.md +0 -0
  51. {soup_cli-0.71.39 → soup_cli-0.71.41}/docs/serving-and-export.md +0 -0
  52. {soup_cli-0.71.39 → soup_cli-0.71.41}/examples/README.md +0 -0
  53. {soup_cli-0.71.39 → soup_cli-0.71.41}/examples/configs/dpo_chat.yaml +0 -0
  54. {soup_cli-0.71.39 → soup_cli-0.71.41}/examples/configs/dpo_example.yaml +0 -0
  55. {soup_cli-0.71.39 → soup_cli-0.71.41}/examples/configs/grpo_reasoning.yaml +0 -0
  56. {soup_cli-0.71.39 → soup_cli-0.71.41}/examples/configs/rlhf_step1_sft.yaml +0 -0
  57. {soup_cli-0.71.39 → soup_cli-0.71.41}/examples/configs/rlhf_step2_reward.yaml +0 -0
  58. {soup_cli-0.71.39 → soup_cli-0.71.41}/examples/configs/rlhf_step3_ppo.yaml +0 -0
  59. {soup_cli-0.71.39 → soup_cli-0.71.41}/examples/configs/sft_basic.yaml +0 -0
  60. {soup_cli-0.71.39 → soup_cli-0.71.41}/examples/configs/vision_llama.yaml +0 -0
  61. {soup_cli-0.71.39 → soup_cli-0.71.41}/examples/data/alpaca_tiny.jsonl +0 -0
  62. {soup_cli-0.71.39 → soup_cli-0.71.41}/examples/data/chat_preferences.jsonl +0 -0
  63. {soup_cli-0.71.39 → soup_cli-0.71.41}/examples/data/dpo_sample.jsonl +0 -0
  64. {soup_cli-0.71.39 → soup_cli-0.71.41}/examples/data/reasoning_math.jsonl +0 -0
  65. {soup_cli-0.71.39 → soup_cli-0.71.41}/examples/reward_hacking/rewards.py +0 -0
  66. {soup_cli-0.71.39 → soup_cli-0.71.41}/examples/synthetic_workflow.md +0 -0
  67. {soup_cli-0.71.39 → soup_cli-0.71.41}/examples/synthetic_workflow.yaml +0 -0
  68. {soup_cli-0.71.39 → soup_cli-0.71.41}/soup.png +0 -0
  69. {soup_cli-0.71.39 → soup_cli-0.71.41}/soup_logo_svg.svg +0 -0
  70. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/__main__.py +0 -0
  71. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/autopilot/__init__.py +0 -0
  72. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/autopilot/analyzer.py +0 -0
  73. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/autopilot/decisions.py +0 -0
  74. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/autopilot/generate_config.py +0 -0
  75. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/cans/__init__.py +0 -0
  76. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/cans/pack.py +0 -0
  77. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/cans/publish.py +0 -0
  78. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/cans/run.py +0 -0
  79. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/cans/schema.py +0 -0
  80. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/cans/unpack.py +0 -0
  81. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/cans/verify.py +0 -0
  82. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/cloud/__init__.py +0 -0
  83. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/cloud/modal.py +0 -0
  84. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/__init__.py +0 -0
  85. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/_eval_v0550.py +0 -0
  86. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/_eval_v0610.py +0 -0
  87. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/_eval_v0650.py +0 -0
  88. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/_eval_v07110.py +0 -0
  89. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/_webhook_cli.py +0 -0
  90. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/ab.py +0 -0
  91. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/active_sample.py +0 -0
  92. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/adapters.py +0 -0
  93. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/advise.py +0 -0
  94. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/agent.py +0 -0
  95. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/airgap.py +0 -0
  96. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/apple_adapter.py +0 -0
  97. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/attest.py +0 -0
  98. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/audit_log.py +0 -0
  99. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/autopilot.py +0 -0
  100. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/bench.py +0 -0
  101. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/bom.py +0 -0
  102. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/build.py +0 -0
  103. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/can.py +0 -0
  104. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/card.py +0 -0
  105. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/chat.py +0 -0
  106. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/ci.py +0 -0
  107. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/compile_cmd.py +0 -0
  108. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/compile_tools.py +0 -0
  109. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/completions.py +0 -0
  110. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/cost.py +0 -0
  111. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/data.py +0 -0
  112. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/data_canary.py +0 -0
  113. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/data_doctor.py +0 -0
  114. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/data_forge.py +0 -0
  115. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/data_mix.py +0 -0
  116. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/data_score.py +0 -0
  117. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/data_topics.py +0 -0
  118. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/delinearize_llama4.py +0 -0
  119. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/deploy.py +0 -0
  120. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/diagnose.py +0 -0
  121. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/diff.py +0 -0
  122. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/distill_prompt.py +0 -0
  123. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/doctor.py +0 -0
  124. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/draft.py +0 -0
  125. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/drift_alarm.py +0 -0
  126. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/edit.py +0 -0
  127. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/env.py +0 -0
  128. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/eval.py +0 -0
  129. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/expect.py +0 -0
  130. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/export.py +0 -0
  131. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/fetch.py +0 -0
  132. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/generate.py +0 -0
  133. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/history.py +0 -0
  134. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/infer.py +0 -0
  135. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/ingest.py +0 -0
  136. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/init.py +0 -0
  137. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/iterative_dpo.py +0 -0
  138. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/license_advisor.py +0 -0
  139. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/llama.py +0 -0
  140. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/local_rl.py +0 -0
  141. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/lock.py +0 -0
  142. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/loop.py +0 -0
  143. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/mcp.py +0 -0
  144. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/merge.py +0 -0
  145. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
  146. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/migrate.py +0 -0
  147. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/monitor.py +0 -0
  148. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/plan.py +0 -0
  149. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/plugins.py +0 -0
  150. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/probe.py +0 -0
  151. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/profile.py +0 -0
  152. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/prune_prompt.py +0 -0
  153. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/push.py +0 -0
  154. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/quantize.py +0 -0
  155. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/quickstart.py +0 -0
  156. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/ra_dit.py +0 -0
  157. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/recipes.py +0 -0
  158. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/registry.py +0 -0
  159. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/runs.py +0 -0
  160. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/serve.py +0 -0
  161. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/ship.py +0 -0
  162. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/shrink.py +0 -0
  163. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/spectrum.py +0 -0
  164. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/steer.py +0 -0
  165. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/sweep.py +0 -0
  166. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/tokenizer.py +0 -0
  167. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/train.py +0 -0
  168. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/tui.py +0 -0
  169. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/tunability.py +0 -0
  170. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/ui.py +0 -0
  171. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/commands/why.py +0 -0
  172. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/config/__init__.py +0 -0
  173. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/config/loader.py +0 -0
  174. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/__init__.py +0 -0
  175. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
  176. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
  177. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
  178. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
  179. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
  180. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
  181. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
  182. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
  183. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/_fixtures/gate/format_json.jsonl +0 -0
  184. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/_fixtures/gate/safety.jsonl +0 -0
  185. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/_fixtures/gate/tool_call.jsonl +0 -0
  186. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
  187. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
  188. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
  189. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
  190. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/augment.py +0 -0
  191. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/chat_templates.py +0 -0
  192. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/collators.py +0 -0
  193. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/formats.py +0 -0
  194. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/loader.py +0 -0
  195. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/loss_mask.py +0 -0
  196. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/providers/__init__.py +0 -0
  197. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/providers/_utils.py +0 -0
  198. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/providers/anthropic.py +0 -0
  199. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/providers/ollama.py +0 -0
  200. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/providers/vllm.py +0 -0
  201. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/sft_format.py +0 -0
  202. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/templates/__init__.py +0 -0
  203. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/templates/code.py +0 -0
  204. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/templates/conversation.py +0 -0
  205. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/templates/preference.py +0 -0
  206. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/templates/qa.py +0 -0
  207. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/templates/reasoning.py +0 -0
  208. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/templates/tool_calling.py +0 -0
  209. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/templates/verifiable.py +0 -0
  210. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/traces/__init__.py +0 -0
  211. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/traces/pair_builder.py +0 -0
  212. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/traces/parsers.py +0 -0
  213. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/traces/quality.py +0 -0
  214. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/data/validator.py +0 -0
  215. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/envs/__init__.py +0 -0
  216. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/envs/_common.py +0 -0
  217. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/envs/retrieval_qa.py +0 -0
  218. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/eval/__init__.py +0 -0
  219. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/eval/arena.py +0 -0
  220. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
  221. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/eval/calibrate.py +0 -0
  222. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
  223. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/eval/custom.py +0 -0
  224. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/eval/forgetting.py +0 -0
  225. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/eval/gate.py +0 -0
  226. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/eval/gate_suites.py +0 -0
  227. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/eval/human.py +0 -0
  228. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/eval/judge.py +0 -0
  229. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/eval/leaderboard.py +0 -0
  230. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/eval/quant_check.py +0 -0
  231. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/experiment/__init__.py +0 -0
  232. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/experiment/tracker.py +0 -0
  233. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/mcp_server/__init__.py +0 -0
  234. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/mcp_server/registry.py +0 -0
  235. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/mcp_server/server.py +0 -0
  236. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/migrate/__init__.py +0 -0
  237. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/migrate/axolotl.py +0 -0
  238. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/migrate/common.py +0 -0
  239. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/migrate/llamafactory.py +0 -0
  240. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/migrate/unsloth.py +0 -0
  241. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/monitoring/__init__.py +0 -0
  242. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/monitoring/callback.py +0 -0
  243. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
  244. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/monitoring/display.py +0 -0
  245. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
  246. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/monitoring/hf_push.py +0 -0
  247. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/monitoring/plugin_callback.py +0 -0
  248. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/monitoring/trace_logger.py +0 -0
  249. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/plugins/__init__.py +0 -0
  250. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/py.typed +0 -0
  251. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/recipes/__init__.py +0 -0
  252. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/recipes/catalog.py +0 -0
  253. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/registry/__init__.py +0 -0
  254. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/registry/attach.py +0 -0
  255. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/registry/diff.py +0 -0
  256. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/registry/hashing.py +0 -0
  257. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/registry/store.py +0 -0
  258. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/__init__.py +0 -0
  259. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/audio.yaml +0 -0
  260. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/bco.yaml +0 -0
  261. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/chat.yaml +0 -0
  262. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/code.yaml +0 -0
  263. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/embedding.yaml +0 -0
  264. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/eu-ai-act.yaml +0 -0
  265. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
  266. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
  267. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
  268. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/hipaa.yaml +0 -0
  269. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/ipo.yaml +0 -0
  270. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/kto.yaml +0 -0
  271. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/longcontext.yaml +0 -0
  272. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/manifest.json +0 -0
  273. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/medical.yaml +0 -0
  274. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/moe.yaml +0 -0
  275. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/orpo.yaml +0 -0
  276. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/pretrain.yaml +0 -0
  277. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/reasoning.yaml +0 -0
  278. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/rlhf.yaml +0 -0
  279. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/simpo.yaml +0 -0
  280. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/soc2.yaml +0 -0
  281. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/sr-11-7.yaml +0 -0
  282. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/tool-calling.yaml +0 -0
  283. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/templates/vision.yaml +0 -0
  284. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/__init__.py +0 -0
  285. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/asr.py +0 -0
  286. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/bco.py +0 -0
  287. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/bitnet.py +0 -0
  288. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/classifier.py +0 -0
  289. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/distill.py +0 -0
  290. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/dpo.py +0 -0
  291. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/embedding.py +0 -0
  292. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/ipo.py +0 -0
  293. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/kto.py +0 -0
  294. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/mlx_dpo.py +0 -0
  295. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/mlx_grpo.py +0 -0
  296. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/mlx_routing.py +0 -0
  297. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/mlx_sft.py +0 -0
  298. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/mole_routing.py +0 -0
  299. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/online_dpo.py +0 -0
  300. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/orpo.py +0 -0
  301. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/ppo.py +0 -0
  302. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/preference.py +0 -0
  303. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/pretrain.py +0 -0
  304. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/prm.py +0 -0
  305. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/raft.py +0 -0
  306. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/reward_model.py +0 -0
  307. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/sft.py +0 -0
  308. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/simpo.py +0 -0
  309. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/tts.py +0 -0
  310. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/trainer/unlearn.py +0 -0
  311. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/tui_app.py +0 -0
  312. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/ui/__init__.py +0 -0
  313. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/ui/app.py +0 -0
  314. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/ui/plugins/__init__.py +0 -0
  315. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/ui/static/app.js +0 -0
  316. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/ui/static/index.html +0 -0
  317. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/ui/static/logo.png +0 -0
  318. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/ui/static/logo.svg +0 -0
  319. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/ui/static/style.css +0 -0
  320. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/__init__.py +0 -0
  321. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/_eval_text.py +0 -0
  322. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/ab_test.py +0 -0
  323. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/activation_offload.py +0 -0
  324. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/active_sampler.py +0 -0
  325. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/adapter_arithmetic.py +0 -0
  326. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/adapter_bisect.py +0 -0
  327. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/adapter_branch.py +0 -0
  328. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/adapter_diff.py +0 -0
  329. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/adapter_fuse.py +0 -0
  330. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/adapter_merge.py +0 -0
  331. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/adapter_pr.py +0 -0
  332. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/adapter_scan.py +0 -0
  333. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/adapter_sign.py +0 -0
  334. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/advanced_precision.py +0 -0
  335. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/advise.py +0 -0
  336. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/advise_history.py +0 -0
  337. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/agent_forge.py +0 -0
  338. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/agent_rollout.py +0 -0
  339. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/agent_sandbox.py +0 -0
  340. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/airgap_bundle.py +0 -0
  341. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/annex_xi.py +0 -0
  342. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/anthropic_messages.py +0 -0
  343. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/apple_adapter.py +0 -0
  344. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/asr_metrics.py +0 -0
  345. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/attest.py +0 -0
  346. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/audit_log.py +0 -0
  347. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/auto_quant.py +0 -0
  348. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/backend_detect.py +0 -0
  349. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/batch_probe.py +0 -0
  350. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/behavior_battery.py +0 -0
  351. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/best_of_n.py +0 -0
  352. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/bitnet.py +0 -0
  353. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/blame.py +0 -0
  354. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/block_expansion.py +0 -0
  355. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/bom.py +0 -0
  356. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/brain_rot.py +0 -0
  357. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/brain_rot_lang.py +0 -0
  358. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/build_dag.py +0 -0
  359. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/canary.py +0 -0
  360. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/canary_discovery.py +0 -0
  361. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/canary_router.py +0 -0
  362. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/capability_suite.py +0 -0
  363. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/checklist_dsl.py +0 -0
  364. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
  365. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/ci_workflow.py +0 -0
  366. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/citation_faithful.py +0 -0
  367. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/classifier.py +0 -0
  368. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/cmaes_merge.py +0 -0
  369. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/compile_tools.py +0 -0
  370. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/completions.py +0 -0
  371. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/constants.py +0 -0
  372. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/convergence.py +0 -0
  373. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/crash.py +0 -0
  374. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/cross_doc_attn.py +0 -0
  375. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/curriculum.py +0 -0
  376. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
  377. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/cut_ce.py +0 -0
  378. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/data_doctor.py +0 -0
  379. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/data_forge.py +0 -0
  380. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/data_lint.py +0 -0
  381. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/data_mix.py +0 -0
  382. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/data_pipeline.py +0 -0
  383. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/data_score.py +0 -0
  384. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/deepspeed.py +0 -0
  385. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/delinearize_llama4.py +0 -0
  386. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/demo_bundles.py +0 -0
  387. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/deploy_autopilot.py +0 -0
  388. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/deploy_measure.py +0 -0
  389. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/diagnose/__init__.py +0 -0
  390. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/diagnose/_common.py +0 -0
  391. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/diagnose/badge.py +0 -0
  392. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/diagnose/citation.py +0 -0
  393. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/diagnose/contamination.py +0 -0
  394. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
  395. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/diagnose/format.py +0 -0
  396. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/diagnose/live.py +0 -0
  397. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/diagnose/memorization.py +0 -0
  398. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
  399. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/diagnose/refusal.py +0 -0
  400. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/diagnose/report.py +0 -0
  401. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/diagnose/runner.py +0 -0
  402. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/distill.py +0 -0
  403. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/dpo_variants.py +0 -0
  404. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/draft.py +0 -0
  405. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/drift_alarm.py +0 -0
  406. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/ebft_gdpo.py +0 -0
  407. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/echo_trap.py +0 -0
  408. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/edit_diff.py +0 -0
  409. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/edit_governor.py +0 -0
  410. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/edit_kernels.py +0 -0
  411. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/embed.py +0 -0
  412. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/encoding.py +0 -0
  413. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/energy.py +0 -0
  414. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/env_lock.py +0 -0
  415. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/errors.py +0 -0
  416. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/eval_design.py +0 -0
  417. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/eval_gate_hook.py +0 -0
  418. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
  419. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/evolve.py +0 -0
  420. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/expectations.py +0 -0
  421. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/fetch_examples.py +0 -0
  422. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/flash_attn.py +0 -0
  423. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/fp8.py +0 -0
  424. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/freeze.py +0 -0
  425. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/fsdp.py +0 -0
  426. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
  427. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/galore.py +0 -0
  428. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/gguf_quant.py +0 -0
  429. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/gpu.py +0 -0
  430. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/gpu_monitor.py +0 -0
  431. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/grace_codebook.py +0 -0
  432. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/graceful_save.py +0 -0
  433. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/grad_accum.py +0 -0
  434. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/gradient_ckpt.py +0 -0
  435. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/grpo_long_context.py +0 -0
  436. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/grpo_variants.py +0 -0
  437. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/hardware_fit.py +0 -0
  438. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/harm_probe.py +0 -0
  439. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/hf.py +0 -0
  440. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/hf_space.py +0 -0
  441. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/hubs.py +0 -0
  442. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/ingest_sources.py +0 -0
  443. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/integrations.py +0 -0
  444. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/interference.py +0 -0
  445. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/interference_live.py +0 -0
  446. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/irt.py +0 -0
  447. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/iterative_dpo.py +0 -0
  448. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/jinja_analyzer.py +0 -0
  449. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/kernel_picker.py +0 -0
  450. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/knowledge_edit.py +0 -0
  451. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/kv_cache.py +0 -0
  452. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/launcher.py +0 -0
  453. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/license_advisor.py +0 -0
  454. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/license_matrix.py +0 -0
  455. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/liger.py +0 -0
  456. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/lisa.py +0 -0
  457. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/live_eval.py +0 -0
  458. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/llama_proxy.py +0 -0
  459. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/llama_server_timings.py +0 -0
  460. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/local_rl.py +0 -0
  461. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
  462. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/loftq_init.py +0 -0
  463. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/log_level.py +0 -0
  464. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/long_context.py +0 -0
  465. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/longlora.py +0 -0
  466. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/loop_budget.py +0 -0
  467. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/loop_daemon.py +0 -0
  468. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/loop_iteration.py +0 -0
  469. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/loop_stages.py +0 -0
  470. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/loop_state.py +0 -0
  471. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/lr_finder.py +0 -0
  472. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/lr_groups.py +0 -0
  473. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/magpie.py +0 -0
  474. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/metrics.py +0 -0
  475. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/mii.py +0 -0
  476. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/minillm.py +0 -0
  477. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/mix_proxy.py +0 -0
  478. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/mixed_precision.py +0 -0
  479. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/mlx.py +0 -0
  480. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/mod.py +0 -0
  481. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/moe.py +0 -0
  482. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/moe_quant.py +0 -0
  483. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/mole_routing.py +0 -0
  484. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/multipack.py +0 -0
  485. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/multipack_sampler.py +0 -0
  486. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/multipack_trainer.py +0 -0
  487. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/namespace_pin.py +0 -0
  488. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/neat_packing.py +0 -0
  489. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/ngram_spec.py +0 -0
  490. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/nlg_metrics.py +0 -0
  491. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/ollama.py +0 -0
  492. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/onboarding.py +0 -0
  493. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/optimizer_zoo.py +0 -0
  494. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/paths.py +0 -0
  495. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/peft_builder.py +0 -0
  496. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/peft_patches.py +0 -0
  497. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/peft_wiring.py +0 -0
  498. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/persona_hub.py +0 -0
  499. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/pipeline.py +0 -0
  500. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/preference_combine.py +0 -0
  501. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/prm.py +0 -0
  502. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/prm_reward.py +0 -0
  503. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/probe_kernel.py +0 -0
  504. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/probe_pack.py +0 -0
  505. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/profiler.py +0 -0
  506. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/profiling.py +0 -0
  507. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/profiling_v0_43.py +0 -0
  508. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/prompt_compile.py +0 -0
  509. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/prompt_distill.py +0 -0
  510. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/prune_prompt.py +0 -0
  511. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/qat.py +0 -0
  512. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/qr_url.py +0 -0
  513. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/quality.py +0 -0
  514. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/quant_menu.py +0 -0
  515. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/ra_dit.py +0 -0
  516. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/ra_dit_run.py +0 -0
  517. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/raft.py +0 -0
  518. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/reasoning_effort.py +0 -0
  519. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/reasoning_parser.py +0 -0
  520. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/recipe_dag.py +0 -0
  521. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/recipe_run.py +0 -0
  522. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/registry.py +0 -0
  523. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/rehearsal.py +0 -0
  524. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/relora.py +0 -0
  525. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/replay.py +0 -0
  526. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/repro_receipt.py +0 -0
  527. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/reward_hack_control.py +0 -0
  528. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/reward_hacking.py +0 -0
  529. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/ring_attention.py +0 -0
  530. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/rl_checkpoint.py +0 -0
  531. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
  532. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/run_cost.py +0 -0
  533. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/sae_diff.py +0 -0
  534. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/save_formats.py +0 -0
  535. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/semdedup.py +0 -0
  536. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/server_tools.py +0 -0
  537. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/sglang.py +0 -0
  538. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/ship_verdict.py +0 -0
  539. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/shortcuts.py +0 -0
  540. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/shrink.py +0 -0
  541. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/signing.py +0 -0
  542. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/sleeper_probe.py +0 -0
  543. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/soup_lock.py +0 -0
  544. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/spec_pairing.py +0 -0
  545. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/spectrum_scan.py +0 -0
  546. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/spike_recovery.py +0 -0
  547. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/sse_train_stream.py +0 -0
  548. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/steering.py +0 -0
  549. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/strict_safetensors.py +0 -0
  550. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/structured_output.py +0 -0
  551. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/sweep_config.py +0 -0
  552. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/tail_latency.py +0 -0
  553. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/terraform_plan.py +0 -0
  554. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/tool_outputs.py +0 -0
  555. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/topics.py +0 -0
  556. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/topology.py +0 -0
  557. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/tracing.py +0 -0
  558. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/trackers.py +0 -0
  559. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/train_event_buffer.py +0 -0
  560. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/trainer_plugins.py +0 -0
  561. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/trust_remote.py +0 -0
  562. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/truth_probe.py +0 -0
  563. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/tts.py +0 -0
  564. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/tts_codec.py +0 -0
  565. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/tunability.py +0 -0
  566. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/ui_env.py +0 -0
  567. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/uld.py +0 -0
  568. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/unlearn_kernels.py +0 -0
  569. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/unlearning.py +0 -0
  570. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/unlearning_eval.py +0 -0
  571. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/unsloth.py +0 -0
  572. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/v028_features.py +0 -0
  573. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/vector_bank.py +0 -0
  574. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/vllm.py +0 -0
  575. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/vscode_setup.py +0 -0
  576. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/warmup.py +0 -0
  577. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/webhooks.py +0 -0
  578. {soup_cli-0.71.39 → soup_cli-0.71.41}/src/soup_cli/utils/why.py +0 -0
  579. {soup_cli-0.71.39 → soup_cli-0.71.41}/templates/chat.yaml +0 -0
  580. {soup_cli-0.71.39 → soup_cli-0.71.41}/templates/code.yaml +0 -0
  581. {soup_cli-0.71.39 → soup_cli-0.71.41}/templates/medical.yaml +0 -0
  582. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/__init__.py +0 -0
  583. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/conftest.py +0 -0
  584. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/qa/v053_qa.md +0 -0
  585. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/qa/v07114_qa.md +0 -0
  586. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/qa/v0716_qa.md +0 -0
  587. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_adapters.py +0 -0
  588. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_advanced_peft.py +0 -0
  589. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_assistant_mask.py +0 -0
  590. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_audio.py +0 -0
  591. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_auto_tuning.py +0 -0
  592. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_autopilot.py +0 -0
  593. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_awq_gptq_export.py +0 -0
  594. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_batch_probe.py +0 -0
  595. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_bco.py +0 -0
  596. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_bench.py +0 -0
  597. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_brain_rot_multilingual.py +0 -0
  598. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_bugfixes.py +0 -0
  599. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_build_dag.py +0 -0
  600. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_callback.py +0 -0
  601. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_cans.py +0 -0
  602. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_chat.py +0 -0
  603. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_chat_template.py +0 -0
  604. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_cli.py +0 -0
  605. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_cli_subprocess.py +0 -0
  606. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_code_review_critical.py +0 -0
  607. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_code_review_deferred.py +0 -0
  608. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_code_review_high.py +0 -0
  609. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_code_review_medium_low.py +0 -0
  610. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_code_review_recurring.py +0 -0
  611. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_config.py +0 -0
  612. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_cost.py +0 -0
  613. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_crash_reporter.py +0 -0
  614. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_curriculum.py +0 -0
  615. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_data.py +0 -0
  616. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_data_augment.py +0 -0
  617. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_data_sample.py +0 -0
  618. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_data_split.py +0 -0
  619. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_data_tools.py +0 -0
  620. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_dataset_hub.py +0 -0
  621. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_dataset_registry.py +0 -0
  622. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_deepspeed.py +0 -0
  623. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_deploy_ollama.py +0 -0
  624. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_diff.py +0 -0
  625. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_display.py +0 -0
  626. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_doctor.py +0 -0
  627. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_dpo_example.py +0 -0
  628. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_dpo_variants.py +0 -0
  629. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_embedding.py +0 -0
  630. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_errors.py +0 -0
  631. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_eval.py +0 -0
  632. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_eval_gate.py +0 -0
  633. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_eval_platform.py +0 -0
  634. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_export.py +0 -0
  635. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_formats.py +0 -0
  636. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_fp8_recipe.py +0 -0
  637. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_freeze_training.py +0 -0
  638. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_generate.py +0 -0
  639. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_gpu.py +0 -0
  640. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_grpo.py +0 -0
  641. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_hf_integration.py +0 -0
  642. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_infer.py +0 -0
  643. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_inference_advanced.py +0 -0
  644. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_init.py +0 -0
  645. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_ipo.py +0 -0
  646. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_jinja_analyzer.py +0 -0
  647. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_kto.py +0 -0
  648. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_loader.py +0 -0
  649. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_log_level.py +0 -0
  650. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_loss_watchdog.py +0 -0
  651. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_merge.py +0 -0
  652. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_migrate.py +0 -0
  653. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_mlx_backend.py +0 -0
  654. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_moe.py +0 -0
  655. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_multi_adapter.py +0 -0
  656. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_multi_gpu.py +0 -0
  657. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_multipack_config.py +0 -0
  658. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_multipack_invariants.py +0 -0
  659. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_multipack_sampler.py +0 -0
  660. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_neat_packing.py +0 -0
  661. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_neftune_rslora.py +0 -0
  662. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_onnx_tensorrt_export.py +0 -0
  663. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_orpo.py +0 -0
  664. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_packing.py +0 -0
  665. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_part_a_wave1.py +0 -0
  666. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_part_a_wave2.py +0 -0
  667. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_part_b.py +0 -0
  668. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_part_c.py +0 -0
  669. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_part_d.py +0 -0
  670. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_part_e.py +0 -0
  671. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_part_f_hardening.py +0 -0
  672. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_peft_methods.py +0 -0
  673. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_peft_patches.py +0 -0
  674. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_performance.py +0 -0
  675. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_pissa_init.py +0 -0
  676. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_ppo.py +0 -0
  677. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_preference_dispatcher.py +0 -0
  678. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_preference_multi.py +0 -0
  679. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_preference_multi_runtime.py +0 -0
  680. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_pretrain.py +0 -0
  681. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_profile.py +0 -0
  682. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_profiling.py +0 -0
  683. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_progress.py +0 -0
  684. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_push.py +0 -0
  685. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_qat.py +0 -0
  686. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_quality_filter.py +0 -0
  687. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_quant_check.py +0 -0
  688. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_quant_menu.py +0 -0
  689. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_quickstart.py +0 -0
  690. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_rank_pattern.py +0 -0
  691. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_recipes.py +0 -0
  692. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_recipes_v031.py +0 -0
  693. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_refusal_multilingual.py +0 -0
  694. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_registry.py +0 -0
  695. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_relora.py +0 -0
  696. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_replay.py +0 -0
  697. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_resume.py +0 -0
  698. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_review_fixes_v07133.py +0 -0
  699. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_rlvr.py +0 -0
  700. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_run_cost.py +0 -0
  701. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_runs.py +0 -0
  702. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_serve.py +0 -0
  703. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_server_generate.py +0 -0
  704. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_sglang_serve.py +0 -0
  705. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_simpo.py +0 -0
  706. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_smoke_train.py +0 -0
  707. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_speculative_decoding.py +0 -0
  708. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_sweep.py +0 -0
  709. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_synth_data_pro.py +0 -0
  710. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_templates_yaml.py +0 -0
  711. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_tensorboard.py +0 -0
  712. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_tool_calling.py +0 -0
  713. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_trace_to_pref.py +0 -0
  714. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_tracker.py +0 -0
  715. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_trainer_coverage_v035.py +0 -0
  716. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_trainer_init.py +0 -0
  717. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_training_intelligence.py +0 -0
  718. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_training_speed.py +0 -0
  719. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_trust_remote_code.py +0 -0
  720. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_tui.py +0 -0
  721. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_ui.py +0 -0
  722. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_ui_chat.py +0 -0
  723. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_ui_config_builder.py +0 -0
  724. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_ui_live_monitor.py +0 -0
  725. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_ui_metrics.py +0 -0
  726. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_unsloth.py +0 -0
  727. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0401_part_c.py +0 -0
  728. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0401_part_d.py +0 -0
  729. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0401_part_e.py +0 -0
  730. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0402_part_a.py +0 -0
  731. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0402_part_b.py +0 -0
  732. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0403_part_a.py +0 -0
  733. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0403_part_b.py +0 -0
  734. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0403_part_c.py +0 -0
  735. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0404_part_a.py +0 -0
  736. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0404_part_b.py +0 -0
  737. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0405_part_a.py +0 -0
  738. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0406_part_a.py +0 -0
  739. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0410_part_a.py +0 -0
  740. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0410_part_b.py +0 -0
  741. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0410_part_c.py +0 -0
  742. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0420.py +0 -0
  743. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0430_part_a.py +0 -0
  744. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0430_part_b.py +0 -0
  745. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0430_part_c.py +0 -0
  746. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0430_part_d.py +0 -0
  747. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0440_part_a.py +0 -0
  748. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0440_part_b.py +0 -0
  749. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0440_part_c.py +0 -0
  750. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0440_part_d.py +0 -0
  751. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0440_review_followups.py +0 -0
  752. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0450.py +0 -0
  753. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0460_part_a.py +0 -0
  754. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0460_part_b.py +0 -0
  755. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0470_part_a.py +0 -0
  756. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0470_part_b.py +0 -0
  757. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0480_part_a.py +0 -0
  758. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0480_part_b.py +0 -0
  759. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0490.py +0 -0
  760. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0500_part_a.py +0 -0
  761. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0500_part_b.py +0 -0
  762. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0500_part_c.py +0 -0
  763. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0500_part_d.py +0 -0
  764. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0500_part_e.py +0 -0
  765. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0510.py +0 -0
  766. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0520.py +0 -0
  767. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0530.py +0 -0
  768. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v05310.py +0 -0
  769. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v05311.py +0 -0
  770. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0531_109.py +0 -0
  771. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0531_139.py +0 -0
  772. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0531_142.py +0 -0
  773. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0531_82.py +0 -0
  774. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0532.py +0 -0
  775. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0533.py +0 -0
  776. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0534.py +0 -0
  777. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0535.py +0 -0
  778. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0536.py +0 -0
  779. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0537.py +0 -0
  780. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0538.py +0 -0
  781. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0539.py +0 -0
  782. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0540.py +0 -0
  783. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0550.py +0 -0
  784. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0550_followups.py +0 -0
  785. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0560.py +0 -0
  786. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0570_part_a.py +0 -0
  787. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0570_part_b.py +0 -0
  788. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0570_part_c.py +0 -0
  789. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0570_part_d.py +0 -0
  790. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0580.py +0 -0
  791. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0590.py +0 -0
  792. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0600_part_a.py +0 -0
  793. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0600_part_b.py +0 -0
  794. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0600_part_c.py +0 -0
  795. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0600_part_d.py +0 -0
  796. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0600_part_e.py +0 -0
  797. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0600_part_f.py +0 -0
  798. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0610_part_a.py +0 -0
  799. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0610_part_b.py +0 -0
  800. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0610_part_c.py +0 -0
  801. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0610_part_d.py +0 -0
  802. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0610_part_e.py +0 -0
  803. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0620_followups.py +0 -0
  804. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0620_part_a.py +0 -0
  805. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0620_part_b.py +0 -0
  806. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0620_part_c.py +0 -0
  807. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0620_part_d.py +0 -0
  808. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0620_part_e.py +0 -0
  809. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0630_followups.py +0 -0
  810. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0630_part_a.py +0 -0
  811. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0630_part_b.py +0 -0
  812. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0630_part_c.py +0 -0
  813. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0630_part_d.py +0 -0
  814. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0630_part_e.py +0 -0
  815. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0631_206.py +0 -0
  816. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0640_followups.py +0 -0
  817. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0640_part_a.py +0 -0
  818. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0640_part_b.py +0 -0
  819. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0640_part_c.py +0 -0
  820. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0640_part_d.py +0 -0
  821. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0640_part_e.py +0 -0
  822. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0640_part_f.py +0 -0
  823. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0650_followups.py +0 -0
  824. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0650_part_a.py +0 -0
  825. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0650_part_b.py +0 -0
  826. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0650_part_c.py +0 -0
  827. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0650_part_d.py +0 -0
  828. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0650_part_e.py +0 -0
  829. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0660_cli.py +0 -0
  830. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0660_followups.py +0 -0
  831. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0660_part_a.py +0 -0
  832. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0660_part_b.py +0 -0
  833. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0660_part_c.py +0 -0
  834. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0660_part_d.py +0 -0
  835. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0660_part_e.py +0 -0
  836. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0670_followups.py +0 -0
  837. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0670_part_a.py +0 -0
  838. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0670_part_b.py +0 -0
  839. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0670_part_c.py +0 -0
  840. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0670_part_d.py +0 -0
  841. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0670_part_e.py +0 -0
  842. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0670_part_f.py +0 -0
  843. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0680_followups.py +0 -0
  844. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0680_part_a.py +0 -0
  845. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0680_part_b.py +0 -0
  846. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0680_part_c.py +0 -0
  847. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0680_part_d.py +0 -0
  848. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0680_part_e.py +0 -0
  849. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0690_part_a.py +0 -0
  850. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0690_part_b.py +0 -0
  851. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0690_part_c.py +0 -0
  852. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0690_part_d.py +0 -0
  853. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0690_part_e.py +0 -0
  854. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0700_part_a.py +0 -0
  855. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0700_part_b.py +0 -0
  856. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0700_part_c.py +0 -0
  857. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0700_part_d.py +0 -0
  858. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0700_part_e.py +0 -0
  859. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0700_part_f.py +0 -0
  860. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07110.py +0 -0
  861. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07111.py +0 -0
  862. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07112.py +0 -0
  863. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07113.py +0 -0
  864. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07114.py +0 -0
  865. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07115.py +0 -0
  866. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07116.py +0 -0
  867. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07117.py +0 -0
  868. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07118.py +0 -0
  869. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07119.py +0 -0
  870. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0712.py +0 -0
  871. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07120.py +0 -0
  872. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07121.py +0 -0
  873. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07122.py +0 -0
  874. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07123.py +0 -0
  875. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07124.py +0 -0
  876. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07125.py +0 -0
  877. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07126.py +0 -0
  878. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07127.py +0 -0
  879. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07128.py +0 -0
  880. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07129.py +0 -0
  881. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0713.py +0 -0
  882. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07130.py +0 -0
  883. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07131.py +0 -0
  884. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07132.py +0 -0
  885. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07133.py +0 -0
  886. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07134.py +0 -0
  887. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07135.py +0 -0
  888. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07136.py +0 -0
  889. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07137.py +0 -0
  890. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07138.py +0 -0
  891. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v07139.py +0 -0
  892. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0714.py +0 -0
  893. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0715.py +0 -0
  894. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0716.py +0 -0
  895. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0717.py +0 -0
  896. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0718.py +0 -0
  897. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_v0719.py +0 -0
  898. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_validator.py +0 -0
  899. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_vision.py +0 -0
  900. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_vllm_serve.py +0 -0
  901. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_warmup.py +0 -0
  902. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_why.py +0 -0
  903. {soup_cli-0.71.39 → soup_cli-0.71.41}/tests/test_windows_encoding.py +0 -0
@@ -12,6 +12,73 @@ reproducing 70+ versions of notes.
12
12
 
13
13
  ## [Unreleased]
14
14
 
15
+ ## [0.71.41] - 2026-07-19
16
+
17
+ **`soup reward stress`: is your reward verifier gameable?** Turn the reward-hacking
18
+ detector on the *verifier itself*. `soup reward synth` (v0.71.40) proves a verifier
19
+ separates your references from friendly perturbations; `stress` asks the adversarial
20
+ question a reward-hacking model asks at train time — *does the verifier pay out for
21
+ degenerate junk?* It feeds empty, length-padded, repetition, and sentinel-spam
22
+ completions and flags any the verifier accepts. Pure, offline, exit 0 = robust /
23
+ 2 = gameable / 1 = error. Nothing in TRL / Unsloth / Axolotl / OpenRLHF tests a
24
+ verifier for gameability.
25
+
26
+ ### Added
27
+
28
+ - **`soup reward stress <reward.py|builtin> [--references golds.jsonl]`** — adversarial
29
+ verifier probe. Attacks (`--attacks empty,length,repetition,sentinel`, `--sentinel`)
30
+ are scored against the real gold, so numeric / tool_call / json_schema verifiers get a
31
+ valid target and still must reject the junk. Reports a per-attack accept-rate table +
32
+ an overall gameability verdict (`--max-gameable`, `--threshold`, `--output-report`).
33
+ Loads the target through the existing reward loader, so it probes a synthesized `.py`
34
+ **and** a builtin (`accuracy` / `format` / `verifiable`). A gold-requiring verifier
35
+ probed with no `--references` is a hard error, never a false "robust".
36
+
37
+ ### Fixed
38
+
39
+ - Corrected the Telemetry section in the ops docs: Soup's telemetry primitives exist but
40
+ are **not wired to any command** — no data is ever sent today (the previous wording
41
+ implied a live opt-in sender). Wiring is deferred until a public privacy policy ships.
42
+
43
+ ## [0.71.40] - 2026-07-19
44
+
45
+ **`soup reward synth`: auto-generate a deterministic reward verifier from your data.**
46
+ Point it at a JSONL of reference (gold) outputs and it infers a verifier, emits a
47
+ readable / committable `.py` reward function, and — the moat — *refuses* to emit one
48
+ that can't tell your references from auto-generated bad answers. Nothing in
49
+ TRL / Unsloth / Axolotl / OpenRLHF synthesizes a reward; every reward today is
50
+ hand-written, hand-picked, or a trained-weights artifact.
51
+
52
+ ### Added
53
+
54
+ - **`soup reward synth <references.jsonl> -o reward.py`** — deterministic verifier
55
+ synthesis. Four families, auto-detected (or pick with `--kind`): `numeric`
56
+ (last-number / `\boxed{}` / `####` extraction, exact or `--tolerance`), `json_schema`
57
+ (induced keys + types + required), `regex` (positional char-classes over
58
+ equal-length golds), `tool_call` (per-tool `required`/`allowed` argument binding).
59
+ The emitted file is self-contained and rides `load_reward_fn`'s existing `.py`
60
+ path — no new trusted-exec surface; you read, edit, commit, and diff it.
61
+ - **Mandatory calibration report** — the synthesized verifier is loaded back and run
62
+ against its own references (must accept ≥90%) and auto-perturbed negatives (must
63
+ reject). A degenerate always-accept verifier is **refused** (`exit 2`), never
64
+ silently emitted. `--plan-only` reports the induced spec without writing;
65
+ `--output-report` persists the calibration JSON.
66
+ - **Comma-separated `reward_fn` (`"accuracy,format"`)** now trains — it resolves to a
67
+ reward *ensemble* (`GRPOTrainer(reward_funcs=[...])`, and unlocks the `rm_ensemble`
68
+ reward-hack detector which needs ≥2 rewards). GRPO-only, validated at config-parse
69
+ time. Fixes a recipe (`deepseek-v3-reasoning`) that shipped exactly this and
70
+ previously crashed with `Unknown reward function` (#311).
71
+
72
+ ### Changed / Fixed
73
+
74
+ - `training.reward_fn` gains a field validator (null-byte / blank / oversize /
75
+ empty-comma-segment rejection) — the oldest arbitrary-code field was the least
76
+ guarded. Comma + `verifiable` without a `verifiable_domain` now fails at parse
77
+ time like the bare `verifiable` form.
78
+ - `envs/calculator.py` / `envs/guess_number.py` docstrings corrected: the reward is
79
+ `reward_fn: verifiable` + `verifiable_domain: math` (the bare `reward_fn='math'`
80
+ they showed was never valid).
81
+
15
82
  ## [0.71.39] - 2026-07-19
16
83
 
17
84
  **"CI for weights, not prompts": close the evidence loop.** `soup ship`'s verdict is
@@ -116,11 +116,11 @@ src/soup_cli/
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, best_of_n, evolve
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, reward_synth
120
120
  templates/ - 21 built-in soup.yaml templates (YAML + manifest.json) with load_template loader (v0.39.0, +bco v0.40.0, +4 compliance v0.71.35)
121
121
  ui/ - Web UI (FastAPI + HTML/JS SPA)
122
122
 
123
- tests/ - Test suite (317 files, 16387 tests)
123
+ tests/ - Test suite (319 files, 16529 tests)
124
124
  examples/ - Real-world config examples and datasets
125
125
  ```
126
126
 
@@ -150,7 +150,7 @@ pytest tests/test_data.py::test_detect_alpaca_format -v
150
150
  pytest tests/ --cov=soup_cli --cov-report=html
151
151
  ```
152
152
 
153
- ### Test Files (313 files)
153
+ ### Test Files (318 files)
154
154
 
155
155
  > A representative sample of the suite below. Run `pytest tests/ -v` for the complete list.
156
156
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: soup-cli
3
- Version: 0.71.39
3
+ Version: 0.71.41
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,29 +193,52 @@ infrastructure instead of improving models. Soup fixes that.
193
193
 
194
194
  ## What's New
195
195
 
196
- **v0.71.39CI for weights, not prompts.** `soup ship`'s verdict is now something Soup can emit, commit, review, and bind to the exact model that produced it — so a fine-tuning gate renders on every PR instead of asking you to hand-edit a JSON file.
197
-
198
- - **Output is finally input.** `soup ship --emit-evidence ev.json` writes the scores in the
199
- `--evidence` schema, so a run replays offline into an identical verdict the round-trip the
200
- old `--output` couldn't do.
201
- - **Commit the gate policy.** Put `eval.ship` in your `soup.yaml` (`forgetting_threshold`,
202
- `general_suite`, `task_mode`, …) and `soup ship --config soup.yaml` reads it the gate is now
203
- reviewable in a PR diff. Explicit flags still win.
204
- - **Provenance-bound evidence.** `--config --emit-evidence` STAMPS a `config_sha` onto the
205
- evidence; `--config --evidence` GATES on it a PR that changed the recipe but forgot to
206
- recompute its evidence is refused (exit 3). Tuning the threshold never falsely invalidates it.
207
- - **The verdict on your PR.** `soup ship --push owner/repo#N` posts the SHIP / DON'T-SHIP card as
208
- a GitHub comment; `soup ci init --config soup.yaml` wires the whole thing into CI.
196
+ **v0.71.41 — `soup reward stress`: is your reward verifier gameable?** Turn the reward-hacking
197
+ detector on the verifier *itself*. `soup reward synth` (v0.71.40) proves a verifier can tell your
198
+ references from friendly bad answers; `stress` asks the adversarial question a reward-hacking model
199
+ asks at train time *does it pay out for degenerate junk?* Nothing in TRL / Unsloth / Axolotl tests
200
+ a verifier for gameability.
201
+
202
+ - **Four attacks, scored against the real gold.** Empty, length-padded, repetition, and
203
+ sentinel-spam completions are fed to the verifier; any it **accepts** is a false positive. A
204
+ per-attack accept-rate table plus one **robust / GAMEABLE** verdict — exit 0 / 2 (1 on error).
205
+ - **Probes a synth `.py` or a builtin.** `soup reward stress reward.py --references golds.jsonl`,
206
+ or `soup reward stress verifiable --verifiable-domain math --references golds.jsonl`. A
207
+ gold-requiring verifier probed with no `--references` is a hard error, never a false "robust".
208
+ - **Tune the strictness.** `--attacks`, `--sentinel`, `--threshold`, `--max-gameable`,
209
+ `--output-report`. Pure, offline, no new deps.
209
210
 
210
211
  ```bash
211
- # producer (train job): stamp the scores with the config that produced them
212
- soup ship --evidence scores.json --config soup.yaml --emit-evidence ship_evidence.json
212
+ # probe a verifier you synthesized (or a builtin) for gameability
213
+ soup reward stress reward.py --references golds.jsonl --output-report stress.json
214
+ # exit 0 = robust · 2 = gameable · 1 = error
215
+ ```
216
+
217
+ <details>
218
+ <summary>Previous release — v0.71.40, soup reward synth (generate a reward verifier from your data)</summary>
213
219
 
214
- # gate (PR CI): refuse evidence that doesn't match the committed config
215
- soup ship --evidence ship_evidence.json --config soup.yaml --push owner/repo#42
216
- soup ci init --config soup.yaml # writes .github/workflows/soup-gate.yml
220
+ Point `soup reward synth` at a JSONL of reference outputs and it infers a deterministic verifier,
221
+ writes a readable / committable `.py` reward function, and — the part nobody else does — *refuses* to
222
+ emit one that can't tell your references from bad answers (four families: `numeric` / `json_schema` /
223
+ `regex` / `tool_call`; a mandatory calibration report is the moat). Reward ensembles
224
+ (`reward_fn: "accuracy,format"`) also train now. (#311)
225
+
226
+ ```bash
227
+ soup reward synth references.jsonl -o reward.py --output-report calib.json
217
228
  ```
218
229
 
230
+ </details>
231
+
232
+ <details>
233
+ <summary>Previous release — v0.71.39, CI for weights not prompts (emit + provenance-bind the ship verdict)</summary>
234
+
235
+ `soup ship`'s verdict became emittable, committable, and provenance-bound: `--emit-evidence` makes a
236
+ run replay into an identical verdict, `eval.ship` in `soup.yaml` + `--config` makes the gate policy
237
+ reviewable, and `--config` binds evidence to the exact recipe that produced it (stale evidence → exit 3).
238
+ `soup ship --push owner/repo#N` posts the SHIP / DON'T-SHIP card on the PR.
239
+
240
+ </details>
241
+
219
242
  <details>
220
243
  <summary>Previous release — v0.71.38, The gate grows teeth (real leg-2 regression gate)</summary>
221
244
 
@@ -49,29 +49,52 @@ infrastructure instead of improving models. Soup fixes that.
49
49
 
50
50
  ## What's New
51
51
 
52
- **v0.71.39CI for weights, not prompts.** `soup ship`'s verdict is now something Soup can emit, commit, review, and bind to the exact model that produced it — so a fine-tuning gate renders on every PR instead of asking you to hand-edit a JSON file.
53
-
54
- - **Output is finally input.** `soup ship --emit-evidence ev.json` writes the scores in the
55
- `--evidence` schema, so a run replays offline into an identical verdict the round-trip the
56
- old `--output` couldn't do.
57
- - **Commit the gate policy.** Put `eval.ship` in your `soup.yaml` (`forgetting_threshold`,
58
- `general_suite`, `task_mode`, …) and `soup ship --config soup.yaml` reads it the gate is now
59
- reviewable in a PR diff. Explicit flags still win.
60
- - **Provenance-bound evidence.** `--config --emit-evidence` STAMPS a `config_sha` onto the
61
- evidence; `--config --evidence` GATES on it a PR that changed the recipe but forgot to
62
- recompute its evidence is refused (exit 3). Tuning the threshold never falsely invalidates it.
63
- - **The verdict on your PR.** `soup ship --push owner/repo#N` posts the SHIP / DON'T-SHIP card as
64
- a GitHub comment; `soup ci init --config soup.yaml` wires the whole thing into CI.
52
+ **v0.71.41 — `soup reward stress`: is your reward verifier gameable?** Turn the reward-hacking
53
+ detector on the verifier *itself*. `soup reward synth` (v0.71.40) proves a verifier can tell your
54
+ references from friendly bad answers; `stress` asks the adversarial question a reward-hacking model
55
+ asks at train time *does it pay out for degenerate junk?* Nothing in TRL / Unsloth / Axolotl tests
56
+ a verifier for gameability.
57
+
58
+ - **Four attacks, scored against the real gold.** Empty, length-padded, repetition, and
59
+ sentinel-spam completions are fed to the verifier; any it **accepts** is a false positive. A
60
+ per-attack accept-rate table plus one **robust / GAMEABLE** verdict — exit 0 / 2 (1 on error).
61
+ - **Probes a synth `.py` or a builtin.** `soup reward stress reward.py --references golds.jsonl`,
62
+ or `soup reward stress verifiable --verifiable-domain math --references golds.jsonl`. A
63
+ gold-requiring verifier probed with no `--references` is a hard error, never a false "robust".
64
+ - **Tune the strictness.** `--attacks`, `--sentinel`, `--threshold`, `--max-gameable`,
65
+ `--output-report`. Pure, offline, no new deps.
65
66
 
66
67
  ```bash
67
- # producer (train job): stamp the scores with the config that produced them
68
- soup ship --evidence scores.json --config soup.yaml --emit-evidence ship_evidence.json
68
+ # probe a verifier you synthesized (or a builtin) for gameability
69
+ soup reward stress reward.py --references golds.jsonl --output-report stress.json
70
+ # exit 0 = robust · 2 = gameable · 1 = error
71
+ ```
72
+
73
+ <details>
74
+ <summary>Previous release — v0.71.40, soup reward synth (generate a reward verifier from your data)</summary>
69
75
 
70
- # gate (PR CI): refuse evidence that doesn't match the committed config
71
- soup ship --evidence ship_evidence.json --config soup.yaml --push owner/repo#42
72
- soup ci init --config soup.yaml # writes .github/workflows/soup-gate.yml
76
+ Point `soup reward synth` at a JSONL of reference outputs and it infers a deterministic verifier,
77
+ writes a readable / committable `.py` reward function, and — the part nobody else does — *refuses* to
78
+ emit one that can't tell your references from bad answers (four families: `numeric` / `json_schema` /
79
+ `regex` / `tool_call`; a mandatory calibration report is the moat). Reward ensembles
80
+ (`reward_fn: "accuracy,format"`) also train now. (#311)
81
+
82
+ ```bash
83
+ soup reward synth references.jsonl -o reward.py --output-report calib.json
73
84
  ```
74
85
 
86
+ </details>
87
+
88
+ <details>
89
+ <summary>Previous release — v0.71.39, CI for weights not prompts (emit + provenance-bind the ship verdict)</summary>
90
+
91
+ `soup ship`'s verdict became emittable, committable, and provenance-bound: `--emit-evidence` makes a
92
+ run replay into an identical verdict, `eval.ship` in `soup.yaml` + `--config` makes the gate policy
93
+ reviewable, and `--config` binds evidence to the exact recipe that produced it (stale evidence → exit 3).
94
+ `soup ship --push owner/repo#N` posts the SHIP / DON'T-SHIP card on the PR.
95
+
96
+ </details>
97
+
75
98
  <details>
76
99
  <summary>Previous release — v0.71.38, The gate grows teeth (real leg-2 regression gate)</summary>
77
100
 
@@ -7,7 +7,7 @@ feature reference — every `soup` capability, grouped by area.
7
7
 
8
8
  | Guide | Covers |
9
9
  |---|---|
10
- | [Training tasks & methods](training.md) | SFT, DPO/GRPO/PPO/KTO/ORPO/SimPO/IPO/BCO, tool-calling, PRM, pre-training, distillation, classification, vision/audio/TTS, unlearning, RAFT/RA-DIT, loop-hardening detectors |
10
+ | [Training tasks & methods](training.md) | SFT, DPO/GRPO/PPO/KTO/ORPO/SimPO/IPO/BCO, tool-calling, PRM, pre-training, distillation, classification, vision/audio/TTS, unlearning, RAFT/RA-DIT, loop-hardening detectors, reward-verifier synthesis |
11
11
  | [PEFT, long context & efficiency](peft-and-efficiency.md) | DoRA, LoRA+, rsLoRA, VeRA, OLoRA, NEFTune, PiSSA, ReLoRA, optimizer & PEFT zoo, LLaMA Pro, GaLore, YaRN/LongLoRA, packing, curriculum, auto-tuning, depth pruning + distill-heal (`soup shrink`) |
12
12
  | [Performance & quantization](performance-and-quantization.md) | QAT, FP8, Quant Menu (I + II), KV-cache, NVFP4, save formats, Cut Cross-Entropy, gradient checkpointing, kernels, activation offloading, multi-GPU / DeepSpeed / FSDP |
13
13
  | [Data engineering](data.md) | Formats, the Axolotl/LF-parity pipeline, data tools, synthetic generation & forge, quality scorecards, trace tooling, remote datasets, mixing, recipe DAGs |
@@ -743,15 +743,9 @@ pip install soup-cli[trackers] # mlflow + swanlab + trackio
743
743
  ```
744
744
 
745
745
 
746
- ## Telemetry (opt-IN, hardware-info-only)
746
+ ## Telemetry (not yet wired)
747
747
 
748
- Soup ships an opt-IN telemetry sender that POSTs hardware-info-only payloads (`soup_version` / `command` / `python` major.minor / `os` / `arch` / optional `duration_seconds`)no dataset paths, model names, or config contents. Enable per-shell:
749
-
750
- ```bash
751
- SOUP_TELEMETRY=1 soup train --config soup.yaml
752
- ```
753
-
754
- The sender uses a 1-second hard timeout, HTTPS-only with private-IP / link-local rejection (same SSRF policy as hub endpoints), and swallows every exception silently — telemetry can never crash training. Disabled by default until a public privacy policy ships.
748
+ Soup contains opt-in, hardware-info-only telemetry primitives in `utils/trackers.py` (`build_telemetry_payload` / `send_telemetry_payload`), but they are **not wired to any command** — no data is ever sent, and no environment variable enables sending today. When wired, the payload will carry only `soup_version` / `command` / `python` major.minor / `os` / `arch` / optional `duration_seconds` — never dataset paths, model names, or config contents — behind a 1-second hard timeout and the same HTTPS-only, private-IP-rejecting SSRF policy as hub endpoints, swallowing every exception so telemetry can never crash training. Wiring is deferred until a public privacy policy is published.
755
749
 
756
750
 
757
751
  ## Plugin System
@@ -182,6 +182,14 @@ soup draft measure ... --min-acceptance 0.6 -o report.json Exit 2 below the flo
182
182
  soup draft distill --target <tuned> --draft-base <tiny> --data d.jsonl -o draft/ Distil a DENSE speculative-decoding draft + register it (v0.71.33)
183
183
  soup draft distill ... --steps N --device cpu --force --plan-only Training budget / device / overwrite -o / render the config only
184
184
  soup draft list List local drafts that `soup serve --auto-spec` will pick up (v0.71.33)
185
+ soup reward synth refs.jsonl -o reward.py Synthesize a deterministic reward verifier from gold outputs (v0.71.40)
186
+ soup reward synth ... --kind numeric|json_schema|regex|tool_call Force a verifier family (default: auto-detect)
187
+ soup reward synth ... --plan-only Report the induced spec + calibration plan; write nothing
188
+ soup reward synth ... --output-report r.json --min-discrimination 0.5 Save the calibration JSON / set the refusal threshold (exit 0 emit / 2 refuse / 1 error)
189
+ soup reward stress reward.py --references golds.jsonl Adversarially probe a verifier for gameability — empty/length/repetition/sentinel junk (v0.71.41)
190
+ soup reward stress verifiable --verifiable-domain math --references golds.jsonl Probe a builtin verifier instead of a .py file
191
+ soup reward stress ... --attacks empty,length,repetition,sentinel --sentinel GOLD --threshold 0.5 --max-gameable 0.0 Tune the attack set / accept threshold / tolerance
192
+ soup reward stress ... --output-report r.json Save the per-attack report JSON (exit 0 robust / 2 gameable / 1 error)
185
193
  soup tui Full-screen Textual dashboard (requires [tui] extra)
186
194
  soup train --config soup.yaml --profile Record torch.profiler trace to <output>/profiles/
187
195
  soup --log-level quiet|normal|verbose|debug Global logging tier (Rich-formatted)
@@ -866,6 +866,62 @@ training:
866
866
  reward_fn: ./my_reward.py
867
867
  ```
868
868
 
869
+ **Reward ensembles** — list several rewards, comma-separated, and they combine (GRPO only).
870
+ This also unlocks the `rm_ensemble` reward-hack detector, which needs ≥ 2 rewards:
871
+ ```yaml
872
+ training:
873
+ reward_fn: "accuracy,format" # both are scored every step
874
+ ```
875
+
876
+ ### Synthesize a verifier from your data (`soup reward synth`)
877
+
878
+ Don't hand-write a verifier — generate one from reference (gold) outputs. Soup infers a
879
+ *deterministic* verifier (numeric / JSON-schema / regex / tool-call), writes a readable, editable
880
+ `.py`, and **refuses to emit** one that can't tell your references from auto-generated bad answers
881
+ (the mandatory calibration report). The emitted file is a normal `reward_fn: reward.py`.
882
+
883
+ ```bash
884
+ # infer + calibrate + emit (exit 0 kept, 2 refused, 1 error)
885
+ soup reward synth references.jsonl -o reward.py --output-report calib.json
886
+
887
+ # preview the induced spec without writing anything
888
+ soup reward synth references.jsonl --plan-only
889
+
890
+ # force a family instead of auto-detecting
891
+ soup reward synth answers.jsonl -o reward.py --kind numeric --tolerance 1e-6
892
+ ```
893
+
894
+ References are a JSONL where each row's gold answer is in an `answer` field (override with
895
+ `--field`) or the last assistant turn of a `messages` list. `--min-discrimination` sets how
896
+ strongly the verifier must separate references from perturbed negatives before it's emitted.
897
+ v1 is deterministic families only — a `\boxed{}`/`####` marker helps the numeric verifier, and
898
+ completions are prompted to mark their answer (standard RLVR practice).
899
+
900
+ ### Stress-test a verifier for gameability (`soup reward stress`)
901
+
902
+ A verifier that passes calibration still might pay out for junk. `soup reward stress` feeds the
903
+ verifier deterministic degenerate completions — empty, length-padded, repeated, and
904
+ sentinel-spam — scored against your real gold answers, and flags any it **accepts**. It's the
905
+ adversarial counterpart to `synth`: calibration proves the verifier tells references from
906
+ *friendly* bad answers; `stress` asks whether a reward-hacking model could game it.
907
+
908
+ ```bash
909
+ # probe a synthesized verifier (or any reward .py) — exit 0 robust, 2 gameable, 1 error
910
+ soup reward stress reward.py --references golds.jsonl --output-report stress.json
911
+
912
+ # probe a builtin verifier instead of a .py file
913
+ soup reward stress verifiable --verifiable-domain math --references golds.jsonl
914
+
915
+ # tune the attack set / accept threshold / gameability tolerance
916
+ soup reward stress reward.py --references golds.jsonl \
917
+ --attacks empty,length,repetition,sentinel --sentinel GOLD \
918
+ --threshold 0.5 --max-gameable 0.0
919
+ ```
920
+
921
+ The report shows a per-attack accept-rate and an overall verdict. A gold-requiring verifier probed
922
+ with **no** `--references` is a hard error (it can't be measured), never a false "robust". Probing a
923
+ `.py` executes its module code, like any custom reward — only stress files you trust.
924
+
869
925
  ### Verifiable Rewards (RLVR)
870
926
 
871
927
  Use `reward_fn: verifiable` with a `verifiable_domain` for deterministic, math-checkable rewards — no judge model, no heuristics. Great for GRPO on math, code, or structured-output tasks.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "soup-cli"
7
- version = "0.71.39"
7
+ version = "0.71.41"
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.39"
3
+ __version__ = "0.71.41"
@@ -563,6 +563,18 @@ app.add_typer(
563
563
  ),
564
564
  )
565
565
 
566
+ # v0.71.40 — `soup reward synth` auto-generate a deterministic verifier.
567
+ from soup_cli.commands import reward as _reward_cmd # noqa: E402
568
+
569
+ app.add_typer(
570
+ _reward_cmd.app,
571
+ name="reward",
572
+ help=(
573
+ "Synthesize a deterministic reward verifier from reference outputs, with "
574
+ "a calibration report that refuses degenerate verifiers (v0.71.40)."
575
+ ),
576
+ )
577
+
566
578
 
567
579
  def _rewrite_advise_argv(argv: list) -> list:
568
580
  """Inject `run` between `advise` and a non-subcommand first argument.