soup-cli 0.71.27__tar.gz → 0.71.29__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 (855) hide show
  1. {soup_cli-0.71.27 → soup_cli-0.71.29}/CHANGELOG.md +58 -0
  2. {soup_cli-0.71.27 → soup_cli-0.71.29}/CONTRIBUTING.md +2 -2
  3. {soup_cli-0.71.27 → soup_cli-0.71.29}/CONTRIBUTORS.md +2 -0
  4. {soup_cli-0.71.27 → soup_cli-0.71.29}/PKG-INFO +19 -18
  5. {soup_cli-0.71.27 → soup_cli-0.71.29}/README.md +14 -17
  6. {soup_cli-0.71.27 → soup_cli-0.71.29}/docs/commands.md +38 -0
  7. {soup_cli-0.71.27 → soup_cli-0.71.29}/docs/peft-and-efficiency.md +51 -0
  8. soup_cli-0.71.29/docs/superpowers/plans/2026-07-05-soup-shrink-depth-prune.md +607 -0
  9. soup_cli-0.71.29/docs/superpowers/specs/2026-07-05-soup-shrink-depth-prune-design.md +218 -0
  10. {soup_cli-0.71.27 → soup_cli-0.71.29}/pyproject.toml +7 -3
  11. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/__init__.py +1 -1
  12. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/cli.py +21 -0
  13. soup_cli-0.71.29/src/soup_cli/commands/mcp.py +62 -0
  14. soup_cli-0.71.29/src/soup_cli/commands/shrink.py +656 -0
  15. soup_cli-0.71.29/src/soup_cli/mcp_server/__init__.py +9 -0
  16. soup_cli-0.71.29/src/soup_cli/mcp_server/registry.py +924 -0
  17. soup_cli-0.71.29/src/soup_cli/mcp_server/server.py +82 -0
  18. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/registry/store.py +2 -0
  19. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/bco.py +6 -0
  20. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/dpo.py +6 -0
  21. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/grpo.py +6 -0
  22. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/ipo.py +6 -0
  23. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/kto.py +6 -0
  24. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/orpo.py +6 -0
  25. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/simpo.py +6 -0
  26. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/live_eval.py +9 -2
  27. soup_cli-0.71.29/src/soup_cli/utils/shrink.py +341 -0
  28. soup_cli-0.71.29/tests/test_trainer_init.py +1230 -0
  29. soup_cli-0.71.29/tests/test_v07128.py +938 -0
  30. soup_cli-0.71.29/tests/test_v07129.py +1267 -0
  31. soup_cli-0.71.27/tests/test_trainer_init.py +0 -469
  32. {soup_cli-0.71.27 → soup_cli-0.71.29}/.dockerignore +0 -0
  33. {soup_cli-0.71.27 → soup_cli-0.71.29}/.github/FUNDING.yml +0 -0
  34. {soup_cli-0.71.27 → soup_cli-0.71.29}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  35. {soup_cli-0.71.27 → soup_cli-0.71.29}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  36. {soup_cli-0.71.27 → soup_cli-0.71.29}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  37. {soup_cli-0.71.27 → soup_cli-0.71.29}/.github/pull_request_template.md +0 -0
  38. {soup_cli-0.71.27 → soup_cli-0.71.29}/.github/workflows/ci.yml +0 -0
  39. {soup_cli-0.71.27 → soup_cli-0.71.29}/.github/workflows/docker.yml +0 -0
  40. {soup_cli-0.71.27 → soup_cli-0.71.29}/.github/workflows/publish.yml +0 -0
  41. {soup_cli-0.71.27 → soup_cli-0.71.29}/.github/workflows/recipe-validation.yml +0 -0
  42. {soup_cli-0.71.27 → soup_cli-0.71.29}/.gitignore +0 -0
  43. {soup_cli-0.71.27 → soup_cli-0.71.29}/.mailmap +0 -0
  44. {soup_cli-0.71.27 → soup_cli-0.71.29}/.pre-commit-config.yaml +0 -0
  45. {soup_cli-0.71.27 → soup_cli-0.71.29}/AGENTS.md +0 -0
  46. {soup_cli-0.71.27 → soup_cli-0.71.29}/CODEOWNERS +0 -0
  47. {soup_cli-0.71.27 → soup_cli-0.71.29}/CODE_OF_CONDUCT.md +0 -0
  48. {soup_cli-0.71.27 → soup_cli-0.71.29}/Dockerfile +0 -0
  49. {soup_cli-0.71.27 → soup_cli-0.71.29}/LICENSE +0 -0
  50. {soup_cli-0.71.27 → soup_cli-0.71.29}/NOTICE +0 -0
  51. {soup_cli-0.71.27 → soup_cli-0.71.29}/SECURITY.md +0 -0
  52. {soup_cli-0.71.27 → soup_cli-0.71.29}/docker-compose.yml +0 -0
  53. {soup_cli-0.71.27 → soup_cli-0.71.29}/docs/README.md +0 -0
  54. {soup_cli-0.71.27 → soup_cli-0.71.29}/docs/adapters-and-governance.md +0 -0
  55. {soup_cli-0.71.27 → soup_cli-0.71.29}/docs/backends-and-ops.md +0 -0
  56. {soup_cli-0.71.27 → soup_cli-0.71.29}/docs/data.md +0 -0
  57. {soup_cli-0.71.27 → soup_cli-0.71.29}/docs/evaluation.md +0 -0
  58. {soup_cli-0.71.27 → soup_cli-0.71.29}/docs/models.md +0 -0
  59. {soup_cli-0.71.27 → soup_cli-0.71.29}/docs/performance-and-quantization.md +0 -0
  60. {soup_cli-0.71.27 → soup_cli-0.71.29}/docs/serving-and-export.md +0 -0
  61. {soup_cli-0.71.27 → soup_cli-0.71.29}/docs/training.md +0 -0
  62. {soup_cli-0.71.27 → soup_cli-0.71.29}/examples/README.md +0 -0
  63. {soup_cli-0.71.27 → soup_cli-0.71.29}/examples/configs/dpo_chat.yaml +0 -0
  64. {soup_cli-0.71.27 → soup_cli-0.71.29}/examples/configs/dpo_example.yaml +0 -0
  65. {soup_cli-0.71.27 → soup_cli-0.71.29}/examples/configs/grpo_reasoning.yaml +0 -0
  66. {soup_cli-0.71.27 → soup_cli-0.71.29}/examples/configs/rlhf_step1_sft.yaml +0 -0
  67. {soup_cli-0.71.27 → soup_cli-0.71.29}/examples/configs/rlhf_step2_reward.yaml +0 -0
  68. {soup_cli-0.71.27 → soup_cli-0.71.29}/examples/configs/rlhf_step3_ppo.yaml +0 -0
  69. {soup_cli-0.71.27 → soup_cli-0.71.29}/examples/configs/sft_basic.yaml +0 -0
  70. {soup_cli-0.71.27 → soup_cli-0.71.29}/examples/configs/vision_llama.yaml +0 -0
  71. {soup_cli-0.71.27 → soup_cli-0.71.29}/examples/data/alpaca_tiny.jsonl +0 -0
  72. {soup_cli-0.71.27 → soup_cli-0.71.29}/examples/data/chat_preferences.jsonl +0 -0
  73. {soup_cli-0.71.27 → soup_cli-0.71.29}/examples/data/dpo_sample.jsonl +0 -0
  74. {soup_cli-0.71.27 → soup_cli-0.71.29}/examples/data/reasoning_math.jsonl +0 -0
  75. {soup_cli-0.71.27 → soup_cli-0.71.29}/examples/reward_hacking/rewards.py +0 -0
  76. {soup_cli-0.71.27 → soup_cli-0.71.29}/examples/synthetic_workflow.md +0 -0
  77. {soup_cli-0.71.27 → soup_cli-0.71.29}/examples/synthetic_workflow.yaml +0 -0
  78. {soup_cli-0.71.27 → soup_cli-0.71.29}/soup.png +0 -0
  79. {soup_cli-0.71.27 → soup_cli-0.71.29}/soup_logo_svg.svg +0 -0
  80. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/__main__.py +0 -0
  81. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/autopilot/__init__.py +0 -0
  82. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/autopilot/analyzer.py +0 -0
  83. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/autopilot/decisions.py +0 -0
  84. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/autopilot/generate_config.py +0 -0
  85. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/cans/__init__.py +0 -0
  86. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/cans/pack.py +0 -0
  87. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/cans/publish.py +0 -0
  88. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/cans/run.py +0 -0
  89. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/cans/schema.py +0 -0
  90. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/cans/unpack.py +0 -0
  91. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/cans/verify.py +0 -0
  92. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/cloud/__init__.py +0 -0
  93. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/cloud/modal.py +0 -0
  94. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/__init__.py +0 -0
  95. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/_eval_v0550.py +0 -0
  96. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/_eval_v0610.py +0 -0
  97. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/_eval_v0650.py +0 -0
  98. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/_eval_v07110.py +0 -0
  99. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/_webhook_cli.py +0 -0
  100. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/ab.py +0 -0
  101. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/active_sample.py +0 -0
  102. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/adapters.py +0 -0
  103. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/advise.py +0 -0
  104. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/agent.py +0 -0
  105. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/airgap.py +0 -0
  106. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/apple_adapter.py +0 -0
  107. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/attest.py +0 -0
  108. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/audit_log.py +0 -0
  109. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/autopilot.py +0 -0
  110. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/bench.py +0 -0
  111. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/bom.py +0 -0
  112. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/build.py +0 -0
  113. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/can.py +0 -0
  114. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/chat.py +0 -0
  115. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/compile_cmd.py +0 -0
  116. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/compile_tools.py +0 -0
  117. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/completions.py +0 -0
  118. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/cost.py +0 -0
  119. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/data.py +0 -0
  120. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/data_doctor.py +0 -0
  121. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/data_forge.py +0 -0
  122. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/data_mix.py +0 -0
  123. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/data_score.py +0 -0
  124. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/delinearize_llama4.py +0 -0
  125. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/deploy.py +0 -0
  126. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/diagnose.py +0 -0
  127. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/diff.py +0 -0
  128. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/distill_prompt.py +0 -0
  129. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/doctor.py +0 -0
  130. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/drift_alarm.py +0 -0
  131. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/edit.py +0 -0
  132. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/env.py +0 -0
  133. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/eval.py +0 -0
  134. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/expect.py +0 -0
  135. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/export.py +0 -0
  136. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/fetch.py +0 -0
  137. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/generate.py +0 -0
  138. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/history.py +0 -0
  139. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/infer.py +0 -0
  140. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/ingest.py +0 -0
  141. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/init.py +0 -0
  142. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/iterative_dpo.py +0 -0
  143. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/license_advisor.py +0 -0
  144. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/llama.py +0 -0
  145. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/local_rl.py +0 -0
  146. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/lock.py +0 -0
  147. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/loop.py +0 -0
  148. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/merge.py +0 -0
  149. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
  150. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/migrate.py +0 -0
  151. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/monitor.py +0 -0
  152. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/plan.py +0 -0
  153. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/plugins.py +0 -0
  154. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/probe.py +0 -0
  155. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/profile.py +0 -0
  156. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/prune_prompt.py +0 -0
  157. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/push.py +0 -0
  158. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/quantize.py +0 -0
  159. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/quickstart.py +0 -0
  160. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/ra_dit.py +0 -0
  161. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/recipes.py +0 -0
  162. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/registry.py +0 -0
  163. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/runs.py +0 -0
  164. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/serve.py +0 -0
  165. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/ship.py +0 -0
  166. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/spectrum.py +0 -0
  167. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/steer.py +0 -0
  168. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/sweep.py +0 -0
  169. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/tokenizer.py +0 -0
  170. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/train.py +0 -0
  171. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/tui.py +0 -0
  172. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/tunability.py +0 -0
  173. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/ui.py +0 -0
  174. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/commands/why.py +0 -0
  175. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/config/__init__.py +0 -0
  176. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/config/loader.py +0 -0
  177. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/config/schema.py +0 -0
  178. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/__init__.py +0 -0
  179. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
  180. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
  181. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
  182. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
  183. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
  184. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
  185. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
  186. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
  187. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
  188. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
  189. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
  190. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
  191. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/augment.py +0 -0
  192. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/chat_templates.py +0 -0
  193. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/collators.py +0 -0
  194. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/formats.py +0 -0
  195. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/loader.py +0 -0
  196. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/loss_mask.py +0 -0
  197. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/providers/__init__.py +0 -0
  198. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/providers/_utils.py +0 -0
  199. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/providers/anthropic.py +0 -0
  200. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/providers/ollama.py +0 -0
  201. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/providers/vllm.py +0 -0
  202. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/sft_format.py +0 -0
  203. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/templates/__init__.py +0 -0
  204. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/templates/code.py +0 -0
  205. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/templates/conversation.py +0 -0
  206. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/templates/preference.py +0 -0
  207. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/templates/qa.py +0 -0
  208. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/templates/reasoning.py +0 -0
  209. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/templates/tool_calling.py +0 -0
  210. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/templates/verifiable.py +0 -0
  211. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/traces/__init__.py +0 -0
  212. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/traces/pair_builder.py +0 -0
  213. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/traces/parsers.py +0 -0
  214. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/traces/quality.py +0 -0
  215. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/data/validator.py +0 -0
  216. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/eval/__init__.py +0 -0
  217. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/eval/arena.py +0 -0
  218. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
  219. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/eval/calibrate.py +0 -0
  220. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
  221. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/eval/custom.py +0 -0
  222. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/eval/forgetting.py +0 -0
  223. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/eval/gate.py +0 -0
  224. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/eval/human.py +0 -0
  225. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/eval/judge.py +0 -0
  226. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/eval/leaderboard.py +0 -0
  227. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/eval/quant_check.py +0 -0
  228. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/experiment/__init__.py +0 -0
  229. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/experiment/tracker.py +0 -0
  230. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/migrate/__init__.py +0 -0
  231. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/migrate/axolotl.py +0 -0
  232. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/migrate/common.py +0 -0
  233. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/migrate/llamafactory.py +0 -0
  234. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/migrate/unsloth.py +0 -0
  235. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/monitoring/__init__.py +0 -0
  236. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/monitoring/callback.py +0 -0
  237. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
  238. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/monitoring/display.py +0 -0
  239. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
  240. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/monitoring/hf_push.py +0 -0
  241. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/monitoring/plugin_callback.py +0 -0
  242. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/monitoring/trace_logger.py +0 -0
  243. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/plugins/__init__.py +0 -0
  244. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/py.typed +0 -0
  245. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/recipes/__init__.py +0 -0
  246. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/recipes/catalog.py +0 -0
  247. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/registry/__init__.py +0 -0
  248. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/registry/attach.py +0 -0
  249. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/registry/diff.py +0 -0
  250. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/registry/hashing.py +0 -0
  251. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/__init__.py +0 -0
  252. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/audio.yaml +0 -0
  253. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/bco.yaml +0 -0
  254. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/chat.yaml +0 -0
  255. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/code.yaml +0 -0
  256. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/embedding.yaml +0 -0
  257. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
  258. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
  259. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
  260. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/ipo.yaml +0 -0
  261. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/kto.yaml +0 -0
  262. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/longcontext.yaml +0 -0
  263. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/manifest.json +0 -0
  264. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/medical.yaml +0 -0
  265. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/moe.yaml +0 -0
  266. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/orpo.yaml +0 -0
  267. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/pretrain.yaml +0 -0
  268. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/reasoning.yaml +0 -0
  269. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/rlhf.yaml +0 -0
  270. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/simpo.yaml +0 -0
  271. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/tool-calling.yaml +0 -0
  272. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/templates/vision.yaml +0 -0
  273. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/__init__.py +0 -0
  274. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/bitnet.py +0 -0
  275. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/classifier.py +0 -0
  276. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/distill.py +0 -0
  277. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/embedding.py +0 -0
  278. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/mlx_dpo.py +0 -0
  279. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/mlx_grpo.py +0 -0
  280. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/mlx_routing.py +0 -0
  281. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/mlx_sft.py +0 -0
  282. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/mole_routing.py +0 -0
  283. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/ppo.py +0 -0
  284. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/preference.py +0 -0
  285. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/pretrain.py +0 -0
  286. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/prm.py +0 -0
  287. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/raft.py +0 -0
  288. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/reward_model.py +0 -0
  289. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/rewards.py +0 -0
  290. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/sft.py +0 -0
  291. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/tts.py +0 -0
  292. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/trainer/unlearn.py +0 -0
  293. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/tui_app.py +0 -0
  294. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/ui/__init__.py +0 -0
  295. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/ui/app.py +0 -0
  296. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/ui/plugins/__init__.py +0 -0
  297. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/ui/static/app.js +0 -0
  298. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/ui/static/index.html +0 -0
  299. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/ui/static/logo.png +0 -0
  300. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/ui/static/logo.svg +0 -0
  301. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/ui/static/style.css +0 -0
  302. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/__init__.py +0 -0
  303. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/_eval_text.py +0 -0
  304. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/ab_test.py +0 -0
  305. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/activation_offload.py +0 -0
  306. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/active_sampler.py +0 -0
  307. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/adapter_bisect.py +0 -0
  308. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/adapter_branch.py +0 -0
  309. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/adapter_diff.py +0 -0
  310. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/adapter_merge.py +0 -0
  311. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/adapter_pr.py +0 -0
  312. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/adapter_scan.py +0 -0
  313. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/adapter_sign.py +0 -0
  314. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/advanced_precision.py +0 -0
  315. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/advise.py +0 -0
  316. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/advise_history.py +0 -0
  317. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/agent_forge.py +0 -0
  318. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/agent_rollout.py +0 -0
  319. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/agent_sandbox.py +0 -0
  320. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/airgap_bundle.py +0 -0
  321. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/annex_xi.py +0 -0
  322. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/anthropic_messages.py +0 -0
  323. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/apple_adapter.py +0 -0
  324. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/attest.py +0 -0
  325. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/audit_log.py +0 -0
  326. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/auto_quant.py +0 -0
  327. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/backend_detect.py +0 -0
  328. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/batch_probe.py +0 -0
  329. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/behavior_battery.py +0 -0
  330. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/bitnet.py +0 -0
  331. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/blame.py +0 -0
  332. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/block_expansion.py +0 -0
  333. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/bom.py +0 -0
  334. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/brain_rot.py +0 -0
  335. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/brain_rot_lang.py +0 -0
  336. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/build_dag.py +0 -0
  337. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/canary_discovery.py +0 -0
  338. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/canary_router.py +0 -0
  339. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/capability_suite.py +0 -0
  340. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/checklist_dsl.py +0 -0
  341. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
  342. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/citation_faithful.py +0 -0
  343. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/classifier.py +0 -0
  344. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/cmaes_merge.py +0 -0
  345. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/compile_tools.py +0 -0
  346. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/completions.py +0 -0
  347. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/constants.py +0 -0
  348. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/convergence.py +0 -0
  349. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/crash.py +0 -0
  350. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/cross_doc_attn.py +0 -0
  351. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/curriculum.py +0 -0
  352. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
  353. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/cut_ce.py +0 -0
  354. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/data_doctor.py +0 -0
  355. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/data_forge.py +0 -0
  356. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/data_lint.py +0 -0
  357. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/data_mix.py +0 -0
  358. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/data_pipeline.py +0 -0
  359. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/data_score.py +0 -0
  360. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/deepspeed.py +0 -0
  361. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/delinearize_llama4.py +0 -0
  362. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/demo_bundles.py +0 -0
  363. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/deploy_autopilot.py +0 -0
  364. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/deploy_measure.py +0 -0
  365. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/diagnose/__init__.py +0 -0
  366. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/diagnose/_common.py +0 -0
  367. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/diagnose/badge.py +0 -0
  368. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/diagnose/citation.py +0 -0
  369. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/diagnose/contamination.py +0 -0
  370. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
  371. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/diagnose/format.py +0 -0
  372. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/diagnose/live.py +0 -0
  373. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/diagnose/memorization.py +0 -0
  374. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
  375. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/diagnose/refusal.py +0 -0
  376. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/diagnose/report.py +0 -0
  377. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/diagnose/runner.py +0 -0
  378. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/distill.py +0 -0
  379. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/dpo_variants.py +0 -0
  380. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/drift_alarm.py +0 -0
  381. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/ebft_gdpo.py +0 -0
  382. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/echo_trap.py +0 -0
  383. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/edit_diff.py +0 -0
  384. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/edit_governor.py +0 -0
  385. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/edit_kernels.py +0 -0
  386. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/encoding.py +0 -0
  387. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/energy.py +0 -0
  388. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/env_lock.py +0 -0
  389. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/errors.py +0 -0
  390. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/eval_design.py +0 -0
  391. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/eval_gate_hook.py +0 -0
  392. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
  393. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/expectations.py +0 -0
  394. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/fetch_examples.py +0 -0
  395. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/flash_attn.py +0 -0
  396. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/fp8.py +0 -0
  397. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/freeze.py +0 -0
  398. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/fsdp.py +0 -0
  399. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
  400. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/galore.py +0 -0
  401. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/gguf_quant.py +0 -0
  402. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/gpu.py +0 -0
  403. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/gpu_monitor.py +0 -0
  404. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/grace_codebook.py +0 -0
  405. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/graceful_save.py +0 -0
  406. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/grad_accum.py +0 -0
  407. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/gradient_ckpt.py +0 -0
  408. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/grpo_long_context.py +0 -0
  409. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/grpo_variants.py +0 -0
  410. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/hardware_fit.py +0 -0
  411. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/harm_probe.py +0 -0
  412. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/hf.py +0 -0
  413. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/hf_space.py +0 -0
  414. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/hubs.py +0 -0
  415. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/ingest_sources.py +0 -0
  416. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/integrations.py +0 -0
  417. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/interference.py +0 -0
  418. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/interference_live.py +0 -0
  419. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/irt.py +0 -0
  420. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/iterative_dpo.py +0 -0
  421. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/jinja_analyzer.py +0 -0
  422. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/kernel_picker.py +0 -0
  423. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/knowledge_edit.py +0 -0
  424. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/kv_cache.py +0 -0
  425. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/launcher.py +0 -0
  426. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/license_advisor.py +0 -0
  427. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/license_matrix.py +0 -0
  428. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/liger.py +0 -0
  429. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/llama_proxy.py +0 -0
  430. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/llama_server_timings.py +0 -0
  431. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/local_rl.py +0 -0
  432. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
  433. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/loftq_init.py +0 -0
  434. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/log_level.py +0 -0
  435. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/long_context.py +0 -0
  436. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/longlora.py +0 -0
  437. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/loop_budget.py +0 -0
  438. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/loop_daemon.py +0 -0
  439. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/loop_iteration.py +0 -0
  440. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/loop_stages.py +0 -0
  441. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/loop_state.py +0 -0
  442. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/lr_finder.py +0 -0
  443. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/lr_groups.py +0 -0
  444. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/magpie.py +0 -0
  445. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/metrics.py +0 -0
  446. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/mii.py +0 -0
  447. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/minillm.py +0 -0
  448. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/mix_proxy.py +0 -0
  449. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/mixed_precision.py +0 -0
  450. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/mlx.py +0 -0
  451. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/mod.py +0 -0
  452. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/moe.py +0 -0
  453. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/moe_quant.py +0 -0
  454. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/mole_routing.py +0 -0
  455. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/multipack.py +0 -0
  456. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/multipack_sampler.py +0 -0
  457. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/multipack_trainer.py +0 -0
  458. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/namespace_pin.py +0 -0
  459. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/neat_packing.py +0 -0
  460. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/ngram_spec.py +0 -0
  461. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/nlg_metrics.py +0 -0
  462. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/ollama.py +0 -0
  463. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/onboarding.py +0 -0
  464. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/optimizer_zoo.py +0 -0
  465. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/paths.py +0 -0
  466. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/peft_builder.py +0 -0
  467. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/peft_patches.py +0 -0
  468. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/peft_wiring.py +0 -0
  469. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/persona_hub.py +0 -0
  470. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/pipeline.py +0 -0
  471. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/preference_combine.py +0 -0
  472. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/prm.py +0 -0
  473. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/probe_kernel.py +0 -0
  474. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/probe_pack.py +0 -0
  475. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/profiler.py +0 -0
  476. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/profiling.py +0 -0
  477. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/profiling_v0_43.py +0 -0
  478. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/prompt_compile.py +0 -0
  479. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/prompt_distill.py +0 -0
  480. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/prune_prompt.py +0 -0
  481. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/qat.py +0 -0
  482. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/qr_url.py +0 -0
  483. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/quality.py +0 -0
  484. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/quant_menu.py +0 -0
  485. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/ra_dit.py +0 -0
  486. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/ra_dit_run.py +0 -0
  487. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/raft.py +0 -0
  488. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/reasoning_effort.py +0 -0
  489. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/reasoning_parser.py +0 -0
  490. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/recipe_dag.py +0 -0
  491. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/recipe_run.py +0 -0
  492. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/registry.py +0 -0
  493. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/relora.py +0 -0
  494. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/replay.py +0 -0
  495. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/repro_receipt.py +0 -0
  496. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/reward_hack_control.py +0 -0
  497. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/reward_hacking.py +0 -0
  498. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/ring_attention.py +0 -0
  499. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/rl_checkpoint.py +0 -0
  500. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
  501. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/run_cost.py +0 -0
  502. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/sae_diff.py +0 -0
  503. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/save_formats.py +0 -0
  504. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/server_tools.py +0 -0
  505. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/sglang.py +0 -0
  506. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/ship_verdict.py +0 -0
  507. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/shortcuts.py +0 -0
  508. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/signing.py +0 -0
  509. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/sleeper_probe.py +0 -0
  510. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/soup_lock.py +0 -0
  511. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/spec_pairing.py +0 -0
  512. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/spectrum_scan.py +0 -0
  513. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/spike_recovery.py +0 -0
  514. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/sse_train_stream.py +0 -0
  515. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/steering.py +0 -0
  516. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/strict_safetensors.py +0 -0
  517. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/structured_output.py +0 -0
  518. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/sweep_config.py +0 -0
  519. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/tail_latency.py +0 -0
  520. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/terraform_plan.py +0 -0
  521. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/tool_outputs.py +0 -0
  522. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/topology.py +0 -0
  523. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/tracing.py +0 -0
  524. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/trackers.py +0 -0
  525. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/train_event_buffer.py +0 -0
  526. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/trainer_plugins.py +0 -0
  527. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/trust_remote.py +0 -0
  528. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/truth_probe.py +0 -0
  529. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/tts.py +0 -0
  530. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/tts_codec.py +0 -0
  531. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/tunability.py +0 -0
  532. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/ui_env.py +0 -0
  533. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/uld.py +0 -0
  534. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/unlearn_kernels.py +0 -0
  535. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/unlearning.py +0 -0
  536. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/unlearning_eval.py +0 -0
  537. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/unsloth.py +0 -0
  538. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/v028_features.py +0 -0
  539. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/vector_bank.py +0 -0
  540. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/vllm.py +0 -0
  541. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/vscode_setup.py +0 -0
  542. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/warmup.py +0 -0
  543. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/webhooks.py +0 -0
  544. {soup_cli-0.71.27 → soup_cli-0.71.29}/src/soup_cli/utils/why.py +0 -0
  545. {soup_cli-0.71.27 → soup_cli-0.71.29}/templates/chat.yaml +0 -0
  546. {soup_cli-0.71.27 → soup_cli-0.71.29}/templates/code.yaml +0 -0
  547. {soup_cli-0.71.27 → soup_cli-0.71.29}/templates/medical.yaml +0 -0
  548. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/__init__.py +0 -0
  549. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/conftest.py +0 -0
  550. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/qa/v053_qa.md +0 -0
  551. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/qa/v07114_qa.md +0 -0
  552. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/qa/v0716_qa.md +0 -0
  553. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_adapters.py +0 -0
  554. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_advanced_peft.py +0 -0
  555. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_assistant_mask.py +0 -0
  556. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_audio.py +0 -0
  557. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_auto_tuning.py +0 -0
  558. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_autopilot.py +0 -0
  559. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_awq_gptq_export.py +0 -0
  560. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_batch_probe.py +0 -0
  561. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_bco.py +0 -0
  562. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_bench.py +0 -0
  563. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_brain_rot_multilingual.py +0 -0
  564. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_bugfixes.py +0 -0
  565. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_build_dag.py +0 -0
  566. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_callback.py +0 -0
  567. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_cans.py +0 -0
  568. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_chat.py +0 -0
  569. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_chat_template.py +0 -0
  570. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_cli.py +0 -0
  571. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_cli_subprocess.py +0 -0
  572. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_code_review_critical.py +0 -0
  573. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_code_review_deferred.py +0 -0
  574. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_code_review_high.py +0 -0
  575. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_code_review_medium_low.py +0 -0
  576. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_code_review_recurring.py +0 -0
  577. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_config.py +0 -0
  578. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_cost.py +0 -0
  579. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_crash_reporter.py +0 -0
  580. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_curriculum.py +0 -0
  581. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_data.py +0 -0
  582. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_data_augment.py +0 -0
  583. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_data_sample.py +0 -0
  584. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_data_split.py +0 -0
  585. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_data_tools.py +0 -0
  586. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_dataset_hub.py +0 -0
  587. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_dataset_registry.py +0 -0
  588. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_deepspeed.py +0 -0
  589. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_deploy_ollama.py +0 -0
  590. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_diff.py +0 -0
  591. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_display.py +0 -0
  592. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_doctor.py +0 -0
  593. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_dpo_example.py +0 -0
  594. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_dpo_variants.py +0 -0
  595. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_embedding.py +0 -0
  596. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_errors.py +0 -0
  597. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_eval.py +0 -0
  598. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_eval_gate.py +0 -0
  599. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_eval_platform.py +0 -0
  600. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_export.py +0 -0
  601. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_formats.py +0 -0
  602. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_fp8_recipe.py +0 -0
  603. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_freeze_training.py +0 -0
  604. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_generate.py +0 -0
  605. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_gpu.py +0 -0
  606. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_grpo.py +0 -0
  607. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_hf_integration.py +0 -0
  608. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_infer.py +0 -0
  609. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_inference_advanced.py +0 -0
  610. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_init.py +0 -0
  611. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_ipo.py +0 -0
  612. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_jinja_analyzer.py +0 -0
  613. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_kto.py +0 -0
  614. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_loader.py +0 -0
  615. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_log_level.py +0 -0
  616. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_loss_watchdog.py +0 -0
  617. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_merge.py +0 -0
  618. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_migrate.py +0 -0
  619. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_mlx_backend.py +0 -0
  620. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_moe.py +0 -0
  621. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_multi_adapter.py +0 -0
  622. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_multi_gpu.py +0 -0
  623. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_multipack_config.py +0 -0
  624. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_multipack_invariants.py +0 -0
  625. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_multipack_sampler.py +0 -0
  626. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_neat_packing.py +0 -0
  627. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_neftune_rslora.py +0 -0
  628. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_onnx_tensorrt_export.py +0 -0
  629. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_orpo.py +0 -0
  630. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_packing.py +0 -0
  631. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_part_a_wave1.py +0 -0
  632. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_part_a_wave2.py +0 -0
  633. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_part_b.py +0 -0
  634. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_part_c.py +0 -0
  635. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_part_d.py +0 -0
  636. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_part_e.py +0 -0
  637. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_part_f_hardening.py +0 -0
  638. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_peft_methods.py +0 -0
  639. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_peft_patches.py +0 -0
  640. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_performance.py +0 -0
  641. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_pissa_init.py +0 -0
  642. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_ppo.py +0 -0
  643. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_preference_dispatcher.py +0 -0
  644. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_preference_multi.py +0 -0
  645. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_preference_multi_runtime.py +0 -0
  646. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_pretrain.py +0 -0
  647. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_profile.py +0 -0
  648. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_profiling.py +0 -0
  649. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_progress.py +0 -0
  650. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_push.py +0 -0
  651. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_qat.py +0 -0
  652. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_quality_filter.py +0 -0
  653. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_quant_check.py +0 -0
  654. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_quant_menu.py +0 -0
  655. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_quickstart.py +0 -0
  656. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_rank_pattern.py +0 -0
  657. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_recipes.py +0 -0
  658. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_recipes_v031.py +0 -0
  659. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_refusal_multilingual.py +0 -0
  660. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_registry.py +0 -0
  661. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_relora.py +0 -0
  662. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_replay.py +0 -0
  663. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_resume.py +0 -0
  664. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_rlvr.py +0 -0
  665. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_run_cost.py +0 -0
  666. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_runs.py +0 -0
  667. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_serve.py +0 -0
  668. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_server_generate.py +0 -0
  669. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_sglang_serve.py +0 -0
  670. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_simpo.py +0 -0
  671. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_smoke_train.py +0 -0
  672. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_speculative_decoding.py +0 -0
  673. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_sweep.py +0 -0
  674. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_synth_data_pro.py +0 -0
  675. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_templates_yaml.py +0 -0
  676. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_tensorboard.py +0 -0
  677. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_tool_calling.py +0 -0
  678. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_trace_to_pref.py +0 -0
  679. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_tracker.py +0 -0
  680. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_trainer_coverage_v035.py +0 -0
  681. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_training_intelligence.py +0 -0
  682. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_training_speed.py +0 -0
  683. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_trust_remote_code.py +0 -0
  684. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_tui.py +0 -0
  685. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_ui.py +0 -0
  686. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_ui_chat.py +0 -0
  687. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_ui_config_builder.py +0 -0
  688. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_ui_live_monitor.py +0 -0
  689. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_ui_metrics.py +0 -0
  690. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_unsloth.py +0 -0
  691. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0401_part_c.py +0 -0
  692. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0401_part_d.py +0 -0
  693. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0401_part_e.py +0 -0
  694. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0402_part_a.py +0 -0
  695. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0402_part_b.py +0 -0
  696. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0403_part_a.py +0 -0
  697. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0403_part_b.py +0 -0
  698. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0403_part_c.py +0 -0
  699. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0404_part_a.py +0 -0
  700. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0404_part_b.py +0 -0
  701. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0405_part_a.py +0 -0
  702. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0406_part_a.py +0 -0
  703. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0410_part_a.py +0 -0
  704. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0410_part_b.py +0 -0
  705. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0410_part_c.py +0 -0
  706. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0420.py +0 -0
  707. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0430_part_a.py +0 -0
  708. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0430_part_b.py +0 -0
  709. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0430_part_c.py +0 -0
  710. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0430_part_d.py +0 -0
  711. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0440_part_a.py +0 -0
  712. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0440_part_b.py +0 -0
  713. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0440_part_c.py +0 -0
  714. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0440_part_d.py +0 -0
  715. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0440_review_followups.py +0 -0
  716. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0450.py +0 -0
  717. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0460_part_a.py +0 -0
  718. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0460_part_b.py +0 -0
  719. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0470_part_a.py +0 -0
  720. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0470_part_b.py +0 -0
  721. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0480_part_a.py +0 -0
  722. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0480_part_b.py +0 -0
  723. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0490.py +0 -0
  724. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0500_part_a.py +0 -0
  725. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0500_part_b.py +0 -0
  726. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0500_part_c.py +0 -0
  727. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0500_part_d.py +0 -0
  728. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0500_part_e.py +0 -0
  729. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0510.py +0 -0
  730. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0520.py +0 -0
  731. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0530.py +0 -0
  732. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v05310.py +0 -0
  733. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v05311.py +0 -0
  734. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0531_109.py +0 -0
  735. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0531_139.py +0 -0
  736. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0531_142.py +0 -0
  737. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0531_82.py +0 -0
  738. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0532.py +0 -0
  739. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0533.py +0 -0
  740. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0534.py +0 -0
  741. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0535.py +0 -0
  742. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0536.py +0 -0
  743. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0537.py +0 -0
  744. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0538.py +0 -0
  745. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0539.py +0 -0
  746. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0540.py +0 -0
  747. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0550.py +0 -0
  748. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0550_followups.py +0 -0
  749. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0560.py +0 -0
  750. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0570_part_a.py +0 -0
  751. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0570_part_b.py +0 -0
  752. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0570_part_c.py +0 -0
  753. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0570_part_d.py +0 -0
  754. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0580.py +0 -0
  755. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0590.py +0 -0
  756. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0600_part_a.py +0 -0
  757. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0600_part_b.py +0 -0
  758. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0600_part_c.py +0 -0
  759. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0600_part_d.py +0 -0
  760. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0600_part_e.py +0 -0
  761. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0600_part_f.py +0 -0
  762. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0610_part_a.py +0 -0
  763. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0610_part_b.py +0 -0
  764. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0610_part_c.py +0 -0
  765. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0610_part_d.py +0 -0
  766. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0610_part_e.py +0 -0
  767. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0620_followups.py +0 -0
  768. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0620_part_a.py +0 -0
  769. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0620_part_b.py +0 -0
  770. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0620_part_c.py +0 -0
  771. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0620_part_d.py +0 -0
  772. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0620_part_e.py +0 -0
  773. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0630_followups.py +0 -0
  774. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0630_part_a.py +0 -0
  775. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0630_part_b.py +0 -0
  776. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0630_part_c.py +0 -0
  777. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0630_part_d.py +0 -0
  778. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0630_part_e.py +0 -0
  779. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0631_206.py +0 -0
  780. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0640_followups.py +0 -0
  781. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0640_part_a.py +0 -0
  782. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0640_part_b.py +0 -0
  783. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0640_part_c.py +0 -0
  784. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0640_part_d.py +0 -0
  785. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0640_part_e.py +0 -0
  786. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0640_part_f.py +0 -0
  787. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0650_followups.py +0 -0
  788. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0650_part_a.py +0 -0
  789. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0650_part_b.py +0 -0
  790. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0650_part_c.py +0 -0
  791. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0650_part_d.py +0 -0
  792. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0650_part_e.py +0 -0
  793. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0660_cli.py +0 -0
  794. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0660_followups.py +0 -0
  795. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0660_part_a.py +0 -0
  796. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0660_part_b.py +0 -0
  797. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0660_part_c.py +0 -0
  798. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0660_part_d.py +0 -0
  799. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0660_part_e.py +0 -0
  800. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0670_followups.py +0 -0
  801. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0670_part_a.py +0 -0
  802. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0670_part_b.py +0 -0
  803. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0670_part_c.py +0 -0
  804. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0670_part_d.py +0 -0
  805. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0670_part_e.py +0 -0
  806. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0670_part_f.py +0 -0
  807. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0680_followups.py +0 -0
  808. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0680_part_a.py +0 -0
  809. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0680_part_b.py +0 -0
  810. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0680_part_c.py +0 -0
  811. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0680_part_d.py +0 -0
  812. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0680_part_e.py +0 -0
  813. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0690_part_a.py +0 -0
  814. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0690_part_b.py +0 -0
  815. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0690_part_c.py +0 -0
  816. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0690_part_d.py +0 -0
  817. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0690_part_e.py +0 -0
  818. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0700_part_a.py +0 -0
  819. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0700_part_b.py +0 -0
  820. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0700_part_c.py +0 -0
  821. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0700_part_d.py +0 -0
  822. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0700_part_e.py +0 -0
  823. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0700_part_f.py +0 -0
  824. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07110.py +0 -0
  825. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07111.py +0 -0
  826. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07112.py +0 -0
  827. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07113.py +0 -0
  828. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07114.py +0 -0
  829. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07115.py +0 -0
  830. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07116.py +0 -0
  831. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07117.py +0 -0
  832. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07118.py +0 -0
  833. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07119.py +0 -0
  834. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0712.py +0 -0
  835. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07120.py +0 -0
  836. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07121.py +0 -0
  837. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07122.py +0 -0
  838. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07123.py +0 -0
  839. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07124.py +0 -0
  840. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07125.py +0 -0
  841. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07126.py +0 -0
  842. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v07127.py +0 -0
  843. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0713.py +0 -0
  844. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0714.py +0 -0
  845. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0715.py +0 -0
  846. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0716.py +0 -0
  847. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0717.py +0 -0
  848. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0718.py +0 -0
  849. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_v0719.py +0 -0
  850. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_validator.py +0 -0
  851. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_vision.py +0 -0
  852. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_vllm_serve.py +0 -0
  853. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_warmup.py +0 -0
  854. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_why.py +0 -0
  855. {soup_cli-0.71.27 → soup_cli-0.71.29}/tests/test_windows_encoding.py +0 -0
@@ -12,6 +12,64 @@ reproducing 70+ versions of notes.
12
12
 
13
13
  ## [Unreleased]
14
14
 
15
+ ## [0.71.29] - 2026-07-05
16
+
17
+ ### Added
18
+ - **`soup shrink`** — depth-prune a model + optional distill-heal
19
+ ("The Unreasonable Ineffectiveness of the Deeper Layers", arXiv:2403.17887).
20
+ Ranks decoder layers by the angular distance of the residual stream across a
21
+ contiguous block over a calibration set, drops the least-important block
22
+ (first and last layer always protected), optionally *heals* by distilling the
23
+ original model into the pruned student, and emits a single dense smaller model
24
+ plus a one-screen **SHIP / DON'T SHIP** perplexity verdict.
25
+ `soup shrink --model <id|path> [--drop-ratio 0.25 | --drop-layers N] --calib
26
+ <calib.jsonl> [--heal <heal.jsonl> --heal-steps N] [--tolerance 0.10]
27
+ [-o <dir>] [--device cpu] [--attach-to-registry <id>] [--plan-only]`.
28
+ Exit codes: 0 = SHIP, 2 = DON'T SHIP, 1 = error. The heal runs as an isolated
29
+ `soup train` subprocess (LoRA-student logit distillation) and the adapter is
30
+ fused back so the shipped artifact stays a single dense model. Arch allowlist
31
+ v1: Llama / Qwen / SmolLM. Validated live on SmolLM2-135M (drop 25 %: 30 -> 22
32
+ layers, ppl x2.98 unhealed; drop 4 + heal: ppl x1.35, recovered).
33
+
34
+ ### Security
35
+ - `soup shrink` contains `--calib` / `--heal` / `--output-dir` (and every
36
+ derived write path: `<out>/model`, `<out>/heal_adapter`, the fuse staging dir)
37
+ under cwd with `os.path.realpath` + `commonpath` + O_NOFOLLOW + symlink
38
+ rejection, re-validating derived paths right before each write (TOCTOU). The
39
+ heal subprocess uses an argv list (no shell) with a timeout; its config is
40
+ schema-validated before spawn; subprocess output is C0/ESC-stripped before it
41
+ reaches the terminal. `--model` defaults `trust_remote_code=False` with a
42
+ probe + warn.
43
+
44
+ ## [0.71.28] - 2026-07-04
45
+
46
+ ### Added
47
+ - **MCP server (`soup mcp serve`)** — drive Soup from any Model Context Protocol
48
+ client (Claude Code / Cursor / Cline / Continue) over stdio. No fine-tuning
49
+ CLI ships an MCP server. Exposes 14 read-only tools as JSON — `advise`,
50
+ `data_inspect` / `data_validate` / `data_score` / `data_doctor`,
51
+ `recipes_search` / `recipes_show`, `runs_list` / `runs_show`,
52
+ `registry_list` / `registry_show`, `profile`, `diagnose_evidence`,
53
+ `ship_evidence` — plus two **plan-only** mutating tools (`train_start`,
54
+ `export`) gated behind `--allow-mutating` (they render the exact command that
55
+ would run; they never execute). The official `mcp` SDK is behind a new
56
+ `[mcp]` extra (`pip install 'soup-cli[mcp]'`), lazy-imported so the core CLI
57
+ stays light. Security: stdio-only (no network listener); every path argument
58
+ re-enters cwd-containment + symlink rejection; output is control-char
59
+ sanitized; errors are path-free; string / size / int bounds enforced.
60
+
61
+ ### Fixed
62
+ - The DPO / IPO / KTO / BCO trainers now apply configured vocabulary expansion
63
+ (`data.add_new_tokens` / `data.new_special_tokens`) via the shared
64
+ `apply_vocab_expansion()` helper during setup, consistent with the SFT path —
65
+ they previously ignored it. Closes #292
66
+ ([#293](https://github.com/MakazhanAlpamys/Soup/pull/293) by [@CODING-DARSH](https://github.com/CODING-DARSH)).
67
+ - The ORPO / SimPO / GRPO trainers now also apply configured vocabulary
68
+ expansion via the shared `apply_vocab_expansion()` helper — completing
69
+ consistent vocab-expansion behavior across every SFT/preference/RL trainer.
70
+ Closes #294
71
+ ([#295](https://github.com/MakazhanAlpamys/Soup/pull/295) by [@CODING-DARSH](https://github.com/CODING-DARSH)).
72
+
15
73
  ## [0.71.27] - 2026-07-03
16
74
 
17
75
  ### Added
@@ -120,7 +120,7 @@ src/soup_cli/
120
120
  templates/ - 17 built-in soup.yaml templates (YAML + manifest.json) with load_template loader (v0.39.0, +bco v0.40.0)
121
121
  ui/ - Web UI (FastAPI + HTML/JS SPA)
122
122
 
123
- tests/ - Test suite (304 files, 15042 tests)
123
+ tests/ - Test suite (306 files, 15224 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 (304 files)
153
+ ### Test Files (306 files)
154
154
 
155
155
  > A representative sample of the suite below. The full table lives in
156
156
  > [`.claude/CLAUDE.md`](.claude/CLAUDE.md); run `pytest tests/ -v` for the complete list.
@@ -48,6 +48,8 @@ Listed by first contribution. PR numbers link the work.
48
48
  - Harden judge-URL validation against hostname prefix bypass (`startswith` → `urlparse`) in `eval/gate.py` ([#288](https://github.com/MakazhanAlpamys/Soup/pull/288))
49
49
  - Apply configured vocabulary expansion (`data.add_new_tokens` / `new_special_tokens`) during SFT trainer init ([#287](https://github.com/MakazhanAlpamys/Soup/pull/287))
50
50
  - Reuse the shared vocab-expansion helper in the vision + audio SFT paths ([#291](https://github.com/MakazhanAlpamys/Soup/pull/291))
51
+ - Honor configured vocab expansion in the DPO / IPO / KTO / BCO trainers ([#293](https://github.com/MakazhanAlpamys/Soup/pull/293))
52
+ - Honor configured vocab expansion in the ORPO / SimPO / GRPO trainers ([#295](https://github.com/MakazhanAlpamys/Soup/pull/295))
51
53
 
52
54
  ---
53
55
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: soup-cli
3
- Version: 0.71.27
3
+ Version: 0.71.29
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
@@ -29,6 +29,7 @@ Requires-Dist: bitsandbytes>=0.41.0; extra == 'all'
29
29
  Requires-Dist: datasets>=2.14.0; extra == 'all'
30
30
  Requires-Dist: datasketch>=1.6.0; extra == 'all'
31
31
  Requires-Dist: fastapi>=0.104.0; extra == 'all'
32
+ Requires-Dist: mcp>=1.2.0; extra == 'all'
32
33
  Requires-Dist: peft>=0.7.0; extra == 'all'
33
34
  Requires-Dist: torch>=2.0.0; extra == 'all'
34
35
  Requires-Dist: transformers<5.0.0,>=4.36.0; extra == 'all'
@@ -60,6 +61,7 @@ Requires-Dist: bitsandbytes>=0.41.0; extra == 'dev'
60
61
  Requires-Dist: cryptography>=41.0.0; extra == 'dev'
61
62
  Requires-Dist: datasets>=2.14.0; extra == 'dev'
62
63
  Requires-Dist: httpx>=0.24.0; extra == 'dev'
64
+ Requires-Dist: mcp>=1.2.0; extra == 'dev'
63
65
  Requires-Dist: mypy>=1.8.0; extra == 'dev'
64
66
  Requires-Dist: peft>=0.7.0; extra == 'dev'
65
67
  Requires-Dist: pre-commit>=3.5.0; extra == 'dev'
@@ -80,6 +82,8 @@ Provides-Extra: gptq
80
82
  Requires-Dist: auto-gptq>=0.7.0; extra == 'gptq'
81
83
  Provides-Extra: liger
82
84
  Requires-Dist: liger-kernel>=0.3.0; extra == 'liger'
85
+ Provides-Extra: mcp
86
+ Requires-Dist: mcp>=1.2.0; extra == 'mcp'
83
87
  Provides-Extra: mix
84
88
  Requires-Dist: scikit-optimize>=0.9.0; extra == 'mix'
85
89
  Provides-Extra: mlx
@@ -189,25 +193,22 @@ infrastructure instead of improving models. Soup fixes that.
189
193
 
190
194
  ## What's New
191
195
 
192
- **v0.71.27Fine-tune Doctor: catch silent failures before they burn a training run.** `soup data doctor` and `soup data lint` no competitor (Unsloth/Axolotl/LlamaFactory) ships either.
193
-
194
- - **The #1 "model never stops generating" bug, caught pre-flight.** `soup data doctor` checks
195
- whether every trained turn actually contains an EOS token plus BOS duplication,
196
- no-system-role templates, unknown roles, and truncation risk before you burn GPU hours on
197
- a broken chat template.
198
- - **See exactly what's trained, token by token.** `--show-mask N` renders sample rows through
199
- the REAL collator path (answer-only / RAFT / packing-aware), so an assistant-mask bug is
200
- visible instantly instead of silently degrading the whole run.
201
- - **Stop silently-worse DPO runs.** `soup data lint` flags length bias (the #1 silent
202
- preference-tuning degradation, reported as an effect size), near-duplicate pairs,
203
- chosen==rejected rows, and prompt leakage across dpo/orpo/simpo/ipo/bco/kto data.
204
- - **Found real bugs on a real tokenizer.** Live-validated against
205
- `HuggingFaceTB/SmolLM2-135M-Instruct` on Windows + RTX 3050 — the smoke pass itself caught
206
- two genuine template-handling bugs before release.
196
+ **v0.71.29Make your model smaller, locally: `soup shrink`.** Depth-prune the least-important layers, then distill-heal — with a binary SHIP / DON'T-SHIP verdict. Based on "The Unreasonable Ineffectiveness of the Deeper Layers" (arXiv:2403.17887).
197
+
198
+ - **Importance-ranked depth pruning.** One forward pass per calibration prompt scores each
199
+ contiguous layer block by the angular distance of the residual stream across it; the
200
+ least-important block is dropped (the first and last layer are always protected).
201
+ - **Distill-heal, Minitron-style.** `--heal` distills the original model into the pruned
202
+ student (LoRA logit-KD) as an isolated `soup train` run, then fuses the adapter back so you
203
+ ship a single dense smaller model not a base + adapter.
204
+ - **A verdict, not a dashboard.** Every run ends in **SHIP** or **DON'T SHIP** on a
205
+ before/after perplexity ratio (`exit 0 = SHIP`, `2 = DON'T`, `1 = error`), so it drops into CI.
206
+ - **Runs on a laptop GPU.** Live-validated on Windows + RTX 3050 with SmolLM2-135M: drop 25 %
207
+ (30 → 22 layers, 21 % params) and drop-4 + CPU heal (perplexity recovered to ×1.35).
207
208
 
208
209
  ```bash
209
- soup data doctor train.jsonl --model meta-llama/Llama-3.1-8B-Instruct --show-mask 3
210
- soup data lint prefs.jsonl --model meta-llama/Llama-3.1-8B-Instruct
210
+ soup shrink --model HuggingFaceTB/SmolLM2-135M-Instruct --drop-ratio 0.25 \
211
+ --calib calib.jsonl --heal heal.jsonl --heal-steps 200 -o shrunk --device cpu
211
212
  ```
212
213
 
213
214
  Full history: [CHANGELOG.md](CHANGELOG.md) &middot; [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
@@ -49,25 +49,22 @@ infrastructure instead of improving models. Soup fixes that.
49
49
 
50
50
  ## What's New
51
51
 
52
- **v0.71.27Fine-tune Doctor: catch silent failures before they burn a training run.** `soup data doctor` and `soup data lint` no competitor (Unsloth/Axolotl/LlamaFactory) ships either.
53
-
54
- - **The #1 "model never stops generating" bug, caught pre-flight.** `soup data doctor` checks
55
- whether every trained turn actually contains an EOS token plus BOS duplication,
56
- no-system-role templates, unknown roles, and truncation risk before you burn GPU hours on
57
- a broken chat template.
58
- - **See exactly what's trained, token by token.** `--show-mask N` renders sample rows through
59
- the REAL collator path (answer-only / RAFT / packing-aware), so an assistant-mask bug is
60
- visible instantly instead of silently degrading the whole run.
61
- - **Stop silently-worse DPO runs.** `soup data lint` flags length bias (the #1 silent
62
- preference-tuning degradation, reported as an effect size), near-duplicate pairs,
63
- chosen==rejected rows, and prompt leakage across dpo/orpo/simpo/ipo/bco/kto data.
64
- - **Found real bugs on a real tokenizer.** Live-validated against
65
- `HuggingFaceTB/SmolLM2-135M-Instruct` on Windows + RTX 3050 — the smoke pass itself caught
66
- two genuine template-handling bugs before release.
52
+ **v0.71.29Make your model smaller, locally: `soup shrink`.** Depth-prune the least-important layers, then distill-heal — with a binary SHIP / DON'T-SHIP verdict. Based on "The Unreasonable Ineffectiveness of the Deeper Layers" (arXiv:2403.17887).
53
+
54
+ - **Importance-ranked depth pruning.** One forward pass per calibration prompt scores each
55
+ contiguous layer block by the angular distance of the residual stream across it; the
56
+ least-important block is dropped (the first and last layer are always protected).
57
+ - **Distill-heal, Minitron-style.** `--heal` distills the original model into the pruned
58
+ student (LoRA logit-KD) as an isolated `soup train` run, then fuses the adapter back so you
59
+ ship a single dense smaller model not a base + adapter.
60
+ - **A verdict, not a dashboard.** Every run ends in **SHIP** or **DON'T SHIP** on a
61
+ before/after perplexity ratio (`exit 0 = SHIP`, `2 = DON'T`, `1 = error`), so it drops into CI.
62
+ - **Runs on a laptop GPU.** Live-validated on Windows + RTX 3050 with SmolLM2-135M: drop 25 %
63
+ (30 → 22 layers, 21 % params) and drop-4 + CPU heal (perplexity recovered to ×1.35).
67
64
 
68
65
  ```bash
69
- soup data doctor train.jsonl --model meta-llama/Llama-3.1-8B-Instruct --show-mask 3
70
- soup data lint prefs.jsonl --model meta-llama/Llama-3.1-8B-Instruct
66
+ soup shrink --model HuggingFaceTB/SmolLM2-135M-Instruct --drop-ratio 0.25 \
67
+ --calib calib.jsonl --heal heal.jsonl --heal-steps 200 -o shrunk --device cpu
71
68
  ```
72
69
 
73
70
  Full history: [CHANGELOG.md](CHANGELOG.md) &middot; [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
@@ -156,6 +156,11 @@ soup ship --base <m> --adapter <lora> --task-eval t.jsonl SHIP / DON'T-SHIP ver
156
156
  soup ship --evidence ev.json [--output v.json] Decide offline from pre-computed scores (no model load)
157
157
  soup ship ... --task-mode judge_score --judge-model ollama://llama3.1 Leg-1 via LLM-as-a-judge
158
158
  soup ship ... --general-suite mmlu,gsm8k --baseline base.json lm-eval leg-2 + recorded base scores
159
+ soup mcp serve MCP server over stdio (drive Soup from Claude Code / Cursor / Cline; requires [mcp] extra) (v0.71.28)
160
+ soup mcp serve --allow-mutating Also expose plan-only train_start / export tools (never execute) (v0.71.28)
161
+ soup shrink --model <id|path> --drop-ratio 0.25 --calib c.jsonl -o shrunk Depth-prune least-important layer block + SHIP/DON'T-SHIP ppl verdict (exit 0/2/1) (v0.71.29)
162
+ soup shrink ... --drop-layers N --heal h.jsonl --heal-steps 200 --device cpu Drop N layers + distill-heal (fuse LoRA back to one dense model)
163
+ soup shrink ... --tolerance 0.10 --plan-only [--attach-to-registry <id>] Ppl-regression tolerance / print importance table only / registry attach
159
164
  soup tui Full-screen Textual dashboard (requires [tui] extra)
160
165
  soup train --config soup.yaml --profile Record torch.profiler trace to <output>/profiles/
161
166
  soup --log-level quiet|normal|verbose|debug Global logging tier (Rich-formatted)
@@ -267,4 +272,37 @@ soup version [--full] [--json] Show version (--full: system info,
267
272
  soup --verbose <command> Full traceback on errors
268
273
  ```
269
274
 
275
+ ## Fine-tune from your coding agent (MCP)
276
+
277
+ `soup mcp serve` runs a [Model Context Protocol](https://modelcontextprotocol.io)
278
+ server over **stdio**, so any MCP client — Claude Code, Cursor, Cline, Continue —
279
+ can drive Soup conversationally. Install the extra first:
280
+
281
+ ```bash
282
+ pip install 'soup-cli[mcp]'
283
+ ```
284
+
285
+ Register it with your client. For **Claude Code** (`.mcp.json` in the repo) or
286
+ the **Claude Desktop** config (`claude_desktop_config.json`):
287
+
288
+ ```json
289
+ {
290
+ "mcpServers": {
291
+ "soup": { "command": "soup", "args": ["mcp", "serve"] }
292
+ }
293
+ }
294
+ ```
295
+
296
+ The server exposes 14 read-only tools — `advise`, `data_inspect`,
297
+ `data_validate`, `data_score`, `data_doctor`, `recipes_search`, `recipes_show`,
298
+ `runs_list`, `runs_show`, `registry_list`, `registry_show`, `profile`,
299
+ `diagnose_evidence`, `ship_evidence` — each returning JSON. Two **plan-only**
300
+ mutating tools (`train_start`, `export`) are gated behind `--allow-mutating`
301
+ (`"args": ["mcp", "serve", "--allow-mutating"]`); even then they only render the
302
+ exact command that would run — they never execute training or export.
303
+
304
+ **Security:** stdio only (no network listener); every path argument stays under
305
+ the working directory and rejects symlinks; tool output is control-char
306
+ sanitized; error messages never leak filesystem paths.
307
+
270
308
 
@@ -24,6 +24,57 @@
24
24
  - [Training Stability & Auto-Tuning](#training-stability--auto-tuning)
25
25
  - [Training Intelligence (Forgetting + Checkpoint Quality)](#training-intelligence-forgetting--checkpoint-quality)
26
26
  - [GaLore (Memory-Efficient Full-Parameter Training)](#galore-memory-efficient-full-parameter-training)
27
+ - [Depth Pruning + Distill-Heal (`soup shrink`)](#depth-pruning--distill-heal-soup-shrink)
28
+
29
+ ---
30
+
31
+ ## Depth Pruning + Distill-Heal (`soup shrink`)
32
+
33
+ `soup shrink` makes a model smaller by dropping its least-important **contiguous
34
+ block of decoder layers**, then optionally *healing* the loss with knowledge
35
+ distillation. It implements "The Unreasonable Ineffectiveness of the Deeper
36
+ Layers" (Gromov et al., arXiv:2403.17887), with a Minitron-style distillation
37
+ heal instead of the paper's plain LoRA fine-tune.
38
+
39
+ **How it ranks layers.** For each candidate block `[L, L+n)`, one forward pass
40
+ per calibration prompt (`output_hidden_states=True`) measures the **angular
41
+ distance** of the residual stream entering (`hidden_states[L]`) vs leaving
42
+ (`hidden_states[L+n]`) the block, averaged over every non-pad token across the
43
+ calibration set. The block with the *lowest* distance transforms the residual
44
+ stream least, so it is the safest to drop. The first and last decoder layers are
45
+ always protected (they carry the most transformation).
46
+
47
+ ```bash
48
+ # See the importance table + chosen block without writing anything:
49
+ soup shrink --model HuggingFaceTB/SmolLM2-135M-Instruct --drop-ratio 0.25 \
50
+ --calib calib.jsonl --device cpu --plan-only
51
+
52
+ # Prune 25% + heal (distill the original into the pruned student, fuse to one
53
+ # dense model) + get a SHIP/DON'T-SHIP perplexity verdict:
54
+ soup shrink --model HuggingFaceTB/SmolLM2-135M-Instruct --drop-ratio 0.25 \
55
+ --calib calib.jsonl --heal heal.jsonl --heal-steps 200 \
56
+ --tolerance 0.10 -o shrunk --device cpu --attach-to-registry <id>
57
+ ```
58
+
59
+ - **`--drop-ratio F` / `--drop-layers N`** (exactly one) — how many contiguous
60
+ layers to drop; the *position* is chosen automatically by the importance scan.
61
+ - **`--calib <jsonl>`** — calibration prompts (`{"text": ...}` / `{"prompt":
62
+ ...}` / chat `messages`). Must stay under cwd.
63
+ - **`--heal <jsonl> --heal-steps N`** — distill the full-depth original into the
64
+ pruned student (LoRA logit-KD) as an isolated `soup train` subprocess, then
65
+ fuse the adapter back into the pruned base so the output is a single dense
66
+ model. Heal keeps the teacher resident (~2× model memory); with `--device
67
+ cpu` the heal runs on CPU (validated ≤ 3 B on a 4 GB card).
68
+ - **`--tolerance F`** — ship if the perplexity regression stays within `F`
69
+ (default `0.10` = 10 %). Exit code `0 = SHIP`, `2 = DON'T SHIP`, `1 = error`.
70
+ - **`-o <dir>`** — the shrunk model lands in `<dir>/model`; the verdict in
71
+ `<dir>/shrink_report.json`.
72
+
73
+ **Arch support (v1):** Llama / Qwen / SmolLM. Others are a friendly reject.
74
+ The importance pass loads the model, so live-validated on ≤ 3 B; larger models
75
+ work but are unvalidated on the reference hardware. Perplexity is an unweighted
76
+ mean of per-example perplexities — valid for the before/after *ratio* the
77
+ verdict uses, not directly comparable to `soup eval` absolute numbers.
27
78
 
28
79
  ---
29
80