soup-cli 0.71.36__tar.gz → 0.71.38__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 (899) hide show
  1. {soup_cli-0.71.36 → soup_cli-0.71.38}/CHANGELOG.md +81 -0
  2. {soup_cli-0.71.36 → soup_cli-0.71.38}/CONTRIBUTING.md +1 -1
  3. {soup_cli-0.71.36 → soup_cli-0.71.38}/CONTRIBUTORS.md +2 -0
  4. {soup_cli-0.71.36 → soup_cli-0.71.38}/PKG-INFO +65 -31
  5. {soup_cli-0.71.36 → soup_cli-0.71.38}/README.md +64 -30
  6. {soup_cli-0.71.36 → soup_cli-0.71.38}/docs/backends-and-ops.md +4 -4
  7. {soup_cli-0.71.36 → soup_cli-0.71.38}/docs/commands.md +6 -5
  8. {soup_cli-0.71.36 → soup_cli-0.71.38}/docs/data.md +3 -3
  9. {soup_cli-0.71.36 → soup_cli-0.71.38}/docs/evaluation.md +23 -6
  10. {soup_cli-0.71.36 → soup_cli-0.71.38}/docs/models.md +23 -23
  11. {soup_cli-0.71.36 → soup_cli-0.71.38}/docs/performance-and-quantization.md +5 -5
  12. {soup_cli-0.71.36 → soup_cli-0.71.38}/docs/serving-and-export.md +6 -6
  13. {soup_cli-0.71.36 → soup_cli-0.71.38}/docs/training.md +2 -2
  14. {soup_cli-0.71.36 → soup_cli-0.71.38}/examples/README.md +3 -3
  15. {soup_cli-0.71.36 → soup_cli-0.71.38}/examples/configs/dpo_example.yaml +2 -2
  16. {soup_cli-0.71.36 → soup_cli-0.71.38}/pyproject.toml +2 -1
  17. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/__init__.py +1 -1
  18. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/cloud/modal.py +1 -1
  19. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/compile_cmd.py +1 -1
  20. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/data.py +5 -3
  21. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/data_canary.py +1 -1
  22. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/data_topics.py +1 -1
  23. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/eval.py +1 -1
  24. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/export.py +4 -4
  25. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/generate.py +1 -1
  26. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/mcp.py +1 -1
  27. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +1 -1
  28. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/serve.py +3 -3
  29. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/ship.py +72 -64
  30. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/train.py +1 -1
  31. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/tui.py +1 -1
  32. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/ui.py +1 -1
  33. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/config/schema.py +18 -18
  34. soup_cli-0.71.38/src/soup_cli/data/_fixtures/gate/format_json.jsonl +40 -0
  35. soup_cli-0.71.38/src/soup_cli/data/_fixtures/gate/safety.jsonl +40 -0
  36. soup_cli-0.71.38/src/soup_cli/data/_fixtures/gate/tool_call.jsonl +40 -0
  37. soup_cli-0.71.38/src/soup_cli/eval/forgetting.py +350 -0
  38. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/eval/gate.py +5 -8
  39. soup_cli-0.71.38/src/soup_cli/eval/gate_suites.py +234 -0
  40. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/eval/judge.py +1 -1
  41. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/mcp_server/registry.py +1 -1
  42. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/audio.yaml +1 -1
  43. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/bco.yaml +1 -1
  44. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/chat.yaml +1 -1
  45. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/code.yaml +1 -1
  46. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/embedding.yaml +1 -1
  47. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/eu-ai-act.yaml +2 -2
  48. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/ipo.yaml +1 -1
  49. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/kto.yaml +1 -1
  50. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/longcontext.yaml +2 -2
  51. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/medical.yaml +1 -1
  52. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/moe.yaml +1 -1
  53. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/orpo.yaml +1 -1
  54. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/pretrain.yaml +1 -1
  55. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/reasoning.yaml +1 -1
  56. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/rlhf.yaml +1 -1
  57. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/simpo.yaml +1 -1
  58. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/tool-calling.yaml +1 -1
  59. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/vision.yaml +1 -1
  60. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/mlx_dpo.py +1 -1
  61. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/mlx_grpo.py +1 -1
  62. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/mlx_sft.py +1 -1
  63. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/online_dpo.py +1 -1
  64. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/sft.py +1 -1
  65. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/apple_adapter.py +1 -1
  66. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/compile_tools.py +2 -2
  67. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/data_doctor.py +1 -1
  68. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/data_lint.py +1 -1
  69. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/delinearize_llama4.py +1 -1
  70. soup_cli-0.71.38/src/soup_cli/utils/diagnose/__init__.py +57 -0
  71. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/_common.py +1 -1
  72. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/errors.py +7 -7
  73. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/grpo_long_context.py +1 -1
  74. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/liger.py +1 -1
  75. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/mii.py +1 -1
  76. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/prompt_compile.py +1 -1
  77. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/prune_prompt.py +1 -1
  78. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_part_a_wave1.py +23 -13
  79. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_training_intelligence.py +6 -3
  80. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07125.py +11 -9
  81. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07136.py +7 -2
  82. soup_cli-0.71.38/tests/test_v07137.py +139 -0
  83. soup_cli-0.71.38/tests/test_v07138.py +598 -0
  84. soup_cli-0.71.36/src/soup_cli/eval/forgetting.py +0 -121
  85. soup_cli-0.71.36/src/soup_cli/utils/diagnose/__init__.py +0 -42
  86. {soup_cli-0.71.36 → soup_cli-0.71.38}/.dockerignore +0 -0
  87. {soup_cli-0.71.36 → soup_cli-0.71.38}/.github/FUNDING.yml +0 -0
  88. {soup_cli-0.71.36 → soup_cli-0.71.38}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  89. {soup_cli-0.71.36 → soup_cli-0.71.38}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  90. {soup_cli-0.71.36 → soup_cli-0.71.38}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  91. {soup_cli-0.71.36 → soup_cli-0.71.38}/.github/pull_request_template.md +0 -0
  92. {soup_cli-0.71.36 → soup_cli-0.71.38}/.github/workflows/ci.yml +0 -0
  93. {soup_cli-0.71.36 → soup_cli-0.71.38}/.github/workflows/docker.yml +0 -0
  94. {soup_cli-0.71.36 → soup_cli-0.71.38}/.github/workflows/publish.yml +0 -0
  95. {soup_cli-0.71.36 → soup_cli-0.71.38}/.github/workflows/recipe-validation.yml +0 -0
  96. {soup_cli-0.71.36 → soup_cli-0.71.38}/.gitignore +0 -0
  97. {soup_cli-0.71.36 → soup_cli-0.71.38}/.mailmap +0 -0
  98. {soup_cli-0.71.36 → soup_cli-0.71.38}/.pre-commit-config.yaml +0 -0
  99. {soup_cli-0.71.36 → soup_cli-0.71.38}/AGENTS.md +0 -0
  100. {soup_cli-0.71.36 → soup_cli-0.71.38}/CODEOWNERS +0 -0
  101. {soup_cli-0.71.36 → soup_cli-0.71.38}/CODE_OF_CONDUCT.md +0 -0
  102. {soup_cli-0.71.36 → soup_cli-0.71.38}/Dockerfile +0 -0
  103. {soup_cli-0.71.36 → soup_cli-0.71.38}/LICENSE +0 -0
  104. {soup_cli-0.71.36 → soup_cli-0.71.38}/NOTICE +0 -0
  105. {soup_cli-0.71.36 → soup_cli-0.71.38}/SECURITY.md +0 -0
  106. {soup_cli-0.71.36 → soup_cli-0.71.38}/docker-compose.yml +0 -0
  107. {soup_cli-0.71.36 → soup_cli-0.71.38}/docs/README.md +0 -0
  108. {soup_cli-0.71.36 → soup_cli-0.71.38}/docs/adapters-and-governance.md +0 -0
  109. {soup_cli-0.71.36 → soup_cli-0.71.38}/docs/compliance.md +0 -0
  110. {soup_cli-0.71.36 → soup_cli-0.71.38}/docs/peft-and-efficiency.md +0 -0
  111. {soup_cli-0.71.36 → soup_cli-0.71.38}/examples/configs/dpo_chat.yaml +0 -0
  112. {soup_cli-0.71.36 → soup_cli-0.71.38}/examples/configs/grpo_reasoning.yaml +0 -0
  113. {soup_cli-0.71.36 → soup_cli-0.71.38}/examples/configs/rlhf_step1_sft.yaml +0 -0
  114. {soup_cli-0.71.36 → soup_cli-0.71.38}/examples/configs/rlhf_step2_reward.yaml +0 -0
  115. {soup_cli-0.71.36 → soup_cli-0.71.38}/examples/configs/rlhf_step3_ppo.yaml +0 -0
  116. {soup_cli-0.71.36 → soup_cli-0.71.38}/examples/configs/sft_basic.yaml +0 -0
  117. {soup_cli-0.71.36 → soup_cli-0.71.38}/examples/configs/vision_llama.yaml +0 -0
  118. {soup_cli-0.71.36 → soup_cli-0.71.38}/examples/data/alpaca_tiny.jsonl +0 -0
  119. {soup_cli-0.71.36 → soup_cli-0.71.38}/examples/data/chat_preferences.jsonl +0 -0
  120. {soup_cli-0.71.36 → soup_cli-0.71.38}/examples/data/dpo_sample.jsonl +0 -0
  121. {soup_cli-0.71.36 → soup_cli-0.71.38}/examples/data/reasoning_math.jsonl +0 -0
  122. {soup_cli-0.71.36 → soup_cli-0.71.38}/examples/reward_hacking/rewards.py +0 -0
  123. {soup_cli-0.71.36 → soup_cli-0.71.38}/examples/synthetic_workflow.md +0 -0
  124. {soup_cli-0.71.36 → soup_cli-0.71.38}/examples/synthetic_workflow.yaml +0 -0
  125. {soup_cli-0.71.36 → soup_cli-0.71.38}/soup.png +0 -0
  126. {soup_cli-0.71.36 → soup_cli-0.71.38}/soup_logo_svg.svg +0 -0
  127. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/__main__.py +0 -0
  128. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/autopilot/__init__.py +0 -0
  129. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/autopilot/analyzer.py +0 -0
  130. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/autopilot/decisions.py +0 -0
  131. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/autopilot/generate_config.py +0 -0
  132. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/cans/__init__.py +0 -0
  133. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/cans/pack.py +0 -0
  134. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/cans/publish.py +0 -0
  135. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/cans/run.py +0 -0
  136. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/cans/schema.py +0 -0
  137. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/cans/unpack.py +0 -0
  138. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/cans/verify.py +0 -0
  139. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/cli.py +0 -0
  140. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/cloud/__init__.py +0 -0
  141. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/__init__.py +0 -0
  142. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/_eval_v0550.py +0 -0
  143. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/_eval_v0610.py +0 -0
  144. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/_eval_v0650.py +0 -0
  145. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/_eval_v07110.py +0 -0
  146. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/_webhook_cli.py +0 -0
  147. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/ab.py +0 -0
  148. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/active_sample.py +0 -0
  149. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/adapters.py +0 -0
  150. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/advise.py +0 -0
  151. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/agent.py +0 -0
  152. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/airgap.py +0 -0
  153. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/apple_adapter.py +0 -0
  154. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/attest.py +0 -0
  155. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/audit_log.py +0 -0
  156. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/autopilot.py +0 -0
  157. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/bench.py +0 -0
  158. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/bom.py +0 -0
  159. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/build.py +0 -0
  160. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/can.py +0 -0
  161. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/card.py +0 -0
  162. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/chat.py +0 -0
  163. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/ci.py +0 -0
  164. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/compile_tools.py +0 -0
  165. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/completions.py +0 -0
  166. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/cost.py +0 -0
  167. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/data_doctor.py +0 -0
  168. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/data_forge.py +0 -0
  169. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/data_mix.py +0 -0
  170. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/data_score.py +0 -0
  171. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/delinearize_llama4.py +0 -0
  172. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/deploy.py +0 -0
  173. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/diagnose.py +0 -0
  174. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/diff.py +0 -0
  175. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/distill_prompt.py +0 -0
  176. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/doctor.py +0 -0
  177. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/draft.py +0 -0
  178. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/drift_alarm.py +0 -0
  179. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/edit.py +0 -0
  180. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/env.py +0 -0
  181. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/expect.py +0 -0
  182. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/fetch.py +0 -0
  183. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/history.py +0 -0
  184. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/infer.py +0 -0
  185. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/ingest.py +0 -0
  186. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/init.py +0 -0
  187. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/iterative_dpo.py +0 -0
  188. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/license_advisor.py +0 -0
  189. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/llama.py +0 -0
  190. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/local_rl.py +0 -0
  191. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/lock.py +0 -0
  192. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/loop.py +0 -0
  193. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/merge.py +0 -0
  194. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/migrate.py +0 -0
  195. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/monitor.py +0 -0
  196. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/plan.py +0 -0
  197. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/plugins.py +0 -0
  198. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/probe.py +0 -0
  199. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/profile.py +0 -0
  200. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/prune_prompt.py +0 -0
  201. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/push.py +0 -0
  202. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/quantize.py +0 -0
  203. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/quickstart.py +0 -0
  204. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/ra_dit.py +0 -0
  205. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/recipes.py +0 -0
  206. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/registry.py +0 -0
  207. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/runs.py +0 -0
  208. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/shrink.py +0 -0
  209. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/spectrum.py +0 -0
  210. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/steer.py +0 -0
  211. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/sweep.py +0 -0
  212. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/tokenizer.py +0 -0
  213. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/tunability.py +0 -0
  214. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/commands/why.py +0 -0
  215. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/config/__init__.py +0 -0
  216. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/config/loader.py +0 -0
  217. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/__init__.py +0 -0
  218. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
  219. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
  220. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
  221. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
  222. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
  223. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
  224. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
  225. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
  226. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
  227. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
  228. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
  229. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
  230. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/augment.py +0 -0
  231. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/chat_templates.py +0 -0
  232. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/collators.py +0 -0
  233. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/formats.py +0 -0
  234. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/loader.py +0 -0
  235. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/loss_mask.py +0 -0
  236. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/providers/__init__.py +0 -0
  237. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/providers/_utils.py +0 -0
  238. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/providers/anthropic.py +0 -0
  239. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/providers/ollama.py +0 -0
  240. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/providers/vllm.py +0 -0
  241. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/sft_format.py +0 -0
  242. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/templates/__init__.py +0 -0
  243. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/templates/code.py +0 -0
  244. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/templates/conversation.py +0 -0
  245. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/templates/preference.py +0 -0
  246. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/templates/qa.py +0 -0
  247. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/templates/reasoning.py +0 -0
  248. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/templates/tool_calling.py +0 -0
  249. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/templates/verifiable.py +0 -0
  250. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/traces/__init__.py +0 -0
  251. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/traces/pair_builder.py +0 -0
  252. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/traces/parsers.py +0 -0
  253. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/traces/quality.py +0 -0
  254. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/data/validator.py +0 -0
  255. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/envs/__init__.py +0 -0
  256. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/envs/_common.py +0 -0
  257. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/envs/calculator.py +0 -0
  258. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/envs/guess_number.py +0 -0
  259. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/envs/retrieval_qa.py +0 -0
  260. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/eval/__init__.py +0 -0
  261. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/eval/arena.py +0 -0
  262. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
  263. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/eval/calibrate.py +0 -0
  264. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
  265. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/eval/custom.py +0 -0
  266. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/eval/human.py +0 -0
  267. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/eval/leaderboard.py +0 -0
  268. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/eval/quant_check.py +0 -0
  269. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/experiment/__init__.py +0 -0
  270. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/experiment/tracker.py +0 -0
  271. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/mcp_server/__init__.py +0 -0
  272. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/mcp_server/server.py +0 -0
  273. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/migrate/__init__.py +0 -0
  274. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/migrate/axolotl.py +0 -0
  275. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/migrate/common.py +0 -0
  276. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/migrate/llamafactory.py +0 -0
  277. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/migrate/unsloth.py +0 -0
  278. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/monitoring/__init__.py +0 -0
  279. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/monitoring/callback.py +0 -0
  280. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
  281. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/monitoring/display.py +0 -0
  282. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
  283. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/monitoring/hf_push.py +0 -0
  284. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/monitoring/plugin_callback.py +0 -0
  285. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/monitoring/trace_logger.py +0 -0
  286. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/plugins/__init__.py +0 -0
  287. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/py.typed +0 -0
  288. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/recipes/__init__.py +0 -0
  289. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/recipes/catalog.py +0 -0
  290. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/registry/__init__.py +0 -0
  291. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/registry/attach.py +0 -0
  292. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/registry/diff.py +0 -0
  293. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/registry/hashing.py +0 -0
  294. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/registry/store.py +0 -0
  295. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/__init__.py +0 -0
  296. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
  297. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
  298. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
  299. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/hipaa.yaml +0 -0
  300. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/manifest.json +0 -0
  301. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/soc2.yaml +0 -0
  302. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/templates/sr-11-7.yaml +0 -0
  303. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/__init__.py +0 -0
  304. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/asr.py +0 -0
  305. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/bco.py +0 -0
  306. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/bitnet.py +0 -0
  307. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/classifier.py +0 -0
  308. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/distill.py +0 -0
  309. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/dpo.py +0 -0
  310. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/embedding.py +0 -0
  311. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/grpo.py +0 -0
  312. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/ipo.py +0 -0
  313. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/kto.py +0 -0
  314. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/mlx_routing.py +0 -0
  315. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/mole_routing.py +0 -0
  316. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/orpo.py +0 -0
  317. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/ppo.py +0 -0
  318. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/preference.py +0 -0
  319. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/pretrain.py +0 -0
  320. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/prm.py +0 -0
  321. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/raft.py +0 -0
  322. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/reward_model.py +0 -0
  323. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/rewards.py +0 -0
  324. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/simpo.py +0 -0
  325. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/tts.py +0 -0
  326. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/trainer/unlearn.py +0 -0
  327. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/tui_app.py +0 -0
  328. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/ui/__init__.py +0 -0
  329. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/ui/app.py +0 -0
  330. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/ui/plugins/__init__.py +0 -0
  331. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/ui/static/app.js +0 -0
  332. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/ui/static/index.html +0 -0
  333. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/ui/static/logo.png +0 -0
  334. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/ui/static/logo.svg +0 -0
  335. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/ui/static/style.css +0 -0
  336. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/__init__.py +0 -0
  337. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/_eval_text.py +0 -0
  338. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/ab_test.py +0 -0
  339. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/activation_offload.py +0 -0
  340. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/active_sampler.py +0 -0
  341. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_arithmetic.py +0 -0
  342. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_bisect.py +0 -0
  343. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_branch.py +0 -0
  344. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_diff.py +0 -0
  345. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_fuse.py +0 -0
  346. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_merge.py +0 -0
  347. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_pr.py +0 -0
  348. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_scan.py +0 -0
  349. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_sign.py +0 -0
  350. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/advanced_precision.py +0 -0
  351. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/advise.py +0 -0
  352. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/advise_history.py +0 -0
  353. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/agent_forge.py +0 -0
  354. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/agent_rollout.py +0 -0
  355. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/agent_sandbox.py +0 -0
  356. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/airgap_bundle.py +0 -0
  357. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/annex_xi.py +0 -0
  358. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/anthropic_messages.py +0 -0
  359. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/asr_metrics.py +0 -0
  360. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/attest.py +0 -0
  361. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/audit_log.py +0 -0
  362. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/auto_quant.py +0 -0
  363. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/backend_detect.py +0 -0
  364. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/batch_probe.py +0 -0
  365. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/behavior_battery.py +0 -0
  366. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/best_of_n.py +0 -0
  367. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/bitnet.py +0 -0
  368. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/blame.py +0 -0
  369. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/block_expansion.py +0 -0
  370. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/bom.py +0 -0
  371. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/brain_rot.py +0 -0
  372. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/brain_rot_lang.py +0 -0
  373. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/build_dag.py +0 -0
  374. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/canary.py +0 -0
  375. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/canary_discovery.py +0 -0
  376. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/canary_router.py +0 -0
  377. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/capability_suite.py +0 -0
  378. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/checklist_dsl.py +0 -0
  379. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
  380. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/ci_workflow.py +0 -0
  381. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/citation_faithful.py +0 -0
  382. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/classifier.py +0 -0
  383. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/cmaes_merge.py +0 -0
  384. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/completions.py +0 -0
  385. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/constants.py +0 -0
  386. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/convergence.py +0 -0
  387. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/crash.py +0 -0
  388. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/cross_doc_attn.py +0 -0
  389. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/curriculum.py +0 -0
  390. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
  391. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/cut_ce.py +0 -0
  392. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/data_forge.py +0 -0
  393. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/data_mix.py +0 -0
  394. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/data_pipeline.py +0 -0
  395. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/data_score.py +0 -0
  396. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/deepspeed.py +0 -0
  397. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/demo_bundles.py +0 -0
  398. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/deploy_autopilot.py +0 -0
  399. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/deploy_measure.py +0 -0
  400. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/badge.py +0 -0
  401. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/citation.py +0 -0
  402. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/contamination.py +0 -0
  403. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
  404. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/format.py +0 -0
  405. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/live.py +0 -0
  406. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/memorization.py +0 -0
  407. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
  408. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/refusal.py +0 -0
  409. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/report.py +0 -0
  410. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/runner.py +0 -0
  411. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/distill.py +0 -0
  412. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/dpo_variants.py +0 -0
  413. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/draft.py +0 -0
  414. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/drift_alarm.py +0 -0
  415. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/ebft_gdpo.py +0 -0
  416. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/echo_trap.py +0 -0
  417. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/edit_diff.py +0 -0
  418. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/edit_governor.py +0 -0
  419. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/edit_kernels.py +0 -0
  420. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/embed.py +0 -0
  421. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/encoding.py +0 -0
  422. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/energy.py +0 -0
  423. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/env_lock.py +0 -0
  424. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/eval_design.py +0 -0
  425. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/eval_gate_hook.py +0 -0
  426. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
  427. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/evolve.py +0 -0
  428. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/expectations.py +0 -0
  429. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/fetch_examples.py +0 -0
  430. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/flash_attn.py +0 -0
  431. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/fp8.py +0 -0
  432. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/freeze.py +0 -0
  433. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/fsdp.py +0 -0
  434. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
  435. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/galore.py +0 -0
  436. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/gguf_quant.py +0 -0
  437. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/gpu.py +0 -0
  438. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/gpu_monitor.py +0 -0
  439. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/grace_codebook.py +0 -0
  440. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/graceful_save.py +0 -0
  441. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/grad_accum.py +0 -0
  442. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/gradient_ckpt.py +0 -0
  443. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/grpo_variants.py +0 -0
  444. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/hardware_fit.py +0 -0
  445. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/harm_probe.py +0 -0
  446. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/hf.py +0 -0
  447. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/hf_space.py +0 -0
  448. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/hubs.py +0 -0
  449. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/ingest_sources.py +0 -0
  450. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/integrations.py +0 -0
  451. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/interference.py +0 -0
  452. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/interference_live.py +0 -0
  453. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/irt.py +0 -0
  454. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/iterative_dpo.py +0 -0
  455. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/jinja_analyzer.py +0 -0
  456. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/kernel_picker.py +0 -0
  457. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/knowledge_edit.py +0 -0
  458. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/kv_cache.py +0 -0
  459. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/launcher.py +0 -0
  460. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/license_advisor.py +0 -0
  461. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/license_matrix.py +0 -0
  462. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/lisa.py +0 -0
  463. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/live_eval.py +0 -0
  464. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/llama_proxy.py +0 -0
  465. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/llama_server_timings.py +0 -0
  466. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/local_rl.py +0 -0
  467. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
  468. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/loftq_init.py +0 -0
  469. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/log_level.py +0 -0
  470. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/long_context.py +0 -0
  471. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/longlora.py +0 -0
  472. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/loop_budget.py +0 -0
  473. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/loop_daemon.py +0 -0
  474. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/loop_iteration.py +0 -0
  475. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/loop_stages.py +0 -0
  476. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/loop_state.py +0 -0
  477. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/lr_finder.py +0 -0
  478. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/lr_groups.py +0 -0
  479. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/magpie.py +0 -0
  480. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/metrics.py +0 -0
  481. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/minillm.py +0 -0
  482. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/mix_proxy.py +0 -0
  483. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/mixed_precision.py +0 -0
  484. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/mlx.py +0 -0
  485. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/mod.py +0 -0
  486. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/moe.py +0 -0
  487. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/moe_quant.py +0 -0
  488. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/mole_routing.py +0 -0
  489. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/multipack.py +0 -0
  490. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/multipack_sampler.py +0 -0
  491. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/multipack_trainer.py +0 -0
  492. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/namespace_pin.py +0 -0
  493. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/neat_packing.py +0 -0
  494. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/ngram_spec.py +0 -0
  495. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/nlg_metrics.py +0 -0
  496. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/ollama.py +0 -0
  497. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/onboarding.py +0 -0
  498. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/optimizer_zoo.py +0 -0
  499. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/paths.py +0 -0
  500. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/peft_builder.py +0 -0
  501. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/peft_patches.py +0 -0
  502. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/peft_wiring.py +0 -0
  503. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/persona_hub.py +0 -0
  504. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/pipeline.py +0 -0
  505. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/preference_combine.py +0 -0
  506. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/prm.py +0 -0
  507. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/prm_reward.py +0 -0
  508. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/probe_kernel.py +0 -0
  509. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/probe_pack.py +0 -0
  510. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/profiler.py +0 -0
  511. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/profiling.py +0 -0
  512. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/profiling_v0_43.py +0 -0
  513. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/prompt_distill.py +0 -0
  514. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/qat.py +0 -0
  515. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/qr_url.py +0 -0
  516. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/quality.py +0 -0
  517. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/quant_menu.py +0 -0
  518. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/ra_dit.py +0 -0
  519. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/ra_dit_run.py +0 -0
  520. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/raft.py +0 -0
  521. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/reasoning_effort.py +0 -0
  522. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/reasoning_parser.py +0 -0
  523. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/recipe_dag.py +0 -0
  524. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/recipe_run.py +0 -0
  525. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/registry.py +0 -0
  526. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/rehearsal.py +0 -0
  527. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/relora.py +0 -0
  528. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/replay.py +0 -0
  529. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/repro_receipt.py +0 -0
  530. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/reward_hack_control.py +0 -0
  531. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/reward_hacking.py +0 -0
  532. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/ring_attention.py +0 -0
  533. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/rl_checkpoint.py +0 -0
  534. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
  535. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/run_cost.py +0 -0
  536. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/sae_diff.py +0 -0
  537. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/save_formats.py +0 -0
  538. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/semdedup.py +0 -0
  539. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/server_tools.py +0 -0
  540. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/sglang.py +0 -0
  541. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/ship_verdict.py +0 -0
  542. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/shortcuts.py +0 -0
  543. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/shrink.py +0 -0
  544. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/signing.py +0 -0
  545. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/sleeper_probe.py +0 -0
  546. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/soup_lock.py +0 -0
  547. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/spec_pairing.py +0 -0
  548. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/spectrum_scan.py +0 -0
  549. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/spike_recovery.py +0 -0
  550. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/sse_train_stream.py +0 -0
  551. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/steering.py +0 -0
  552. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/strict_safetensors.py +0 -0
  553. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/structured_output.py +0 -0
  554. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/sweep_config.py +0 -0
  555. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/tail_latency.py +0 -0
  556. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/terraform_plan.py +0 -0
  557. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/tool_outputs.py +0 -0
  558. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/topics.py +0 -0
  559. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/topology.py +0 -0
  560. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/tracing.py +0 -0
  561. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/trackers.py +0 -0
  562. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/train_event_buffer.py +0 -0
  563. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/trainer_plugins.py +0 -0
  564. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/trust_remote.py +0 -0
  565. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/truth_probe.py +0 -0
  566. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/tts.py +0 -0
  567. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/tts_codec.py +0 -0
  568. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/tunability.py +0 -0
  569. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/ui_env.py +0 -0
  570. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/uld.py +0 -0
  571. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/unlearn_kernels.py +0 -0
  572. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/unlearning.py +0 -0
  573. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/unlearning_eval.py +0 -0
  574. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/unsloth.py +0 -0
  575. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/v028_features.py +0 -0
  576. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/vector_bank.py +0 -0
  577. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/vllm.py +0 -0
  578. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/vscode_setup.py +0 -0
  579. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/warmup.py +0 -0
  580. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/webhooks.py +0 -0
  581. {soup_cli-0.71.36 → soup_cli-0.71.38}/src/soup_cli/utils/why.py +0 -0
  582. {soup_cli-0.71.36 → soup_cli-0.71.38}/templates/chat.yaml +0 -0
  583. {soup_cli-0.71.36 → soup_cli-0.71.38}/templates/code.yaml +0 -0
  584. {soup_cli-0.71.36 → soup_cli-0.71.38}/templates/medical.yaml +0 -0
  585. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/__init__.py +0 -0
  586. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/conftest.py +0 -0
  587. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/qa/v053_qa.md +0 -0
  588. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/qa/v07114_qa.md +0 -0
  589. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/qa/v0716_qa.md +0 -0
  590. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_adapters.py +0 -0
  591. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_advanced_peft.py +0 -0
  592. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_assistant_mask.py +0 -0
  593. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_audio.py +0 -0
  594. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_auto_tuning.py +0 -0
  595. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_autopilot.py +0 -0
  596. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_awq_gptq_export.py +0 -0
  597. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_batch_probe.py +0 -0
  598. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_bco.py +0 -0
  599. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_bench.py +0 -0
  600. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_brain_rot_multilingual.py +0 -0
  601. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_bugfixes.py +0 -0
  602. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_build_dag.py +0 -0
  603. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_callback.py +0 -0
  604. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_cans.py +0 -0
  605. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_chat.py +0 -0
  606. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_chat_template.py +0 -0
  607. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_cli.py +0 -0
  608. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_cli_subprocess.py +0 -0
  609. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_code_review_critical.py +0 -0
  610. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_code_review_deferred.py +0 -0
  611. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_code_review_high.py +0 -0
  612. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_code_review_medium_low.py +0 -0
  613. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_code_review_recurring.py +0 -0
  614. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_config.py +0 -0
  615. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_cost.py +0 -0
  616. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_crash_reporter.py +0 -0
  617. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_curriculum.py +0 -0
  618. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_data.py +0 -0
  619. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_data_augment.py +0 -0
  620. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_data_sample.py +0 -0
  621. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_data_split.py +0 -0
  622. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_data_tools.py +0 -0
  623. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_dataset_hub.py +0 -0
  624. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_dataset_registry.py +0 -0
  625. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_deepspeed.py +0 -0
  626. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_deploy_ollama.py +0 -0
  627. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_diff.py +0 -0
  628. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_display.py +0 -0
  629. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_doctor.py +0 -0
  630. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_dpo_example.py +0 -0
  631. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_dpo_variants.py +0 -0
  632. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_embedding.py +0 -0
  633. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_errors.py +0 -0
  634. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_eval.py +0 -0
  635. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_eval_gate.py +0 -0
  636. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_eval_platform.py +0 -0
  637. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_export.py +0 -0
  638. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_formats.py +0 -0
  639. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_fp8_recipe.py +0 -0
  640. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_freeze_training.py +0 -0
  641. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_generate.py +0 -0
  642. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_gpu.py +0 -0
  643. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_grpo.py +0 -0
  644. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_hf_integration.py +0 -0
  645. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_infer.py +0 -0
  646. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_inference_advanced.py +0 -0
  647. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_init.py +0 -0
  648. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_ipo.py +0 -0
  649. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_jinja_analyzer.py +0 -0
  650. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_kto.py +0 -0
  651. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_loader.py +0 -0
  652. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_log_level.py +0 -0
  653. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_loss_watchdog.py +0 -0
  654. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_merge.py +0 -0
  655. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_migrate.py +0 -0
  656. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_mlx_backend.py +0 -0
  657. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_moe.py +0 -0
  658. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_multi_adapter.py +0 -0
  659. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_multi_gpu.py +0 -0
  660. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_multipack_config.py +0 -0
  661. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_multipack_invariants.py +0 -0
  662. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_multipack_sampler.py +0 -0
  663. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_neat_packing.py +0 -0
  664. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_neftune_rslora.py +0 -0
  665. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_onnx_tensorrt_export.py +0 -0
  666. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_orpo.py +0 -0
  667. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_packing.py +0 -0
  668. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_part_a_wave2.py +0 -0
  669. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_part_b.py +0 -0
  670. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_part_c.py +0 -0
  671. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_part_d.py +0 -0
  672. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_part_e.py +0 -0
  673. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_part_f_hardening.py +0 -0
  674. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_peft_methods.py +0 -0
  675. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_peft_patches.py +0 -0
  676. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_performance.py +0 -0
  677. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_pissa_init.py +0 -0
  678. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_ppo.py +0 -0
  679. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_preference_dispatcher.py +0 -0
  680. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_preference_multi.py +0 -0
  681. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_preference_multi_runtime.py +0 -0
  682. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_pretrain.py +0 -0
  683. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_profile.py +0 -0
  684. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_profiling.py +0 -0
  685. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_progress.py +0 -0
  686. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_push.py +0 -0
  687. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_qat.py +0 -0
  688. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_quality_filter.py +0 -0
  689. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_quant_check.py +0 -0
  690. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_quant_menu.py +0 -0
  691. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_quickstart.py +0 -0
  692. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_rank_pattern.py +0 -0
  693. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_recipes.py +0 -0
  694. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_recipes_v031.py +0 -0
  695. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_refusal_multilingual.py +0 -0
  696. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_registry.py +0 -0
  697. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_relora.py +0 -0
  698. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_replay.py +0 -0
  699. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_resume.py +0 -0
  700. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_review_fixes_v07133.py +0 -0
  701. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_rlvr.py +0 -0
  702. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_run_cost.py +0 -0
  703. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_runs.py +0 -0
  704. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_serve.py +0 -0
  705. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_server_generate.py +0 -0
  706. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_sglang_serve.py +0 -0
  707. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_simpo.py +0 -0
  708. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_smoke_train.py +0 -0
  709. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_speculative_decoding.py +0 -0
  710. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_sweep.py +0 -0
  711. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_synth_data_pro.py +0 -0
  712. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_templates_yaml.py +0 -0
  713. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_tensorboard.py +0 -0
  714. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_tool_calling.py +0 -0
  715. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_trace_to_pref.py +0 -0
  716. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_tracker.py +0 -0
  717. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_trainer_coverage_v035.py +0 -0
  718. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_trainer_init.py +0 -0
  719. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_training_speed.py +0 -0
  720. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_trust_remote_code.py +0 -0
  721. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_tui.py +0 -0
  722. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_ui.py +0 -0
  723. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_ui_chat.py +0 -0
  724. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_ui_config_builder.py +0 -0
  725. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_ui_live_monitor.py +0 -0
  726. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_ui_metrics.py +0 -0
  727. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_unsloth.py +0 -0
  728. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0401_part_c.py +0 -0
  729. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0401_part_d.py +0 -0
  730. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0401_part_e.py +0 -0
  731. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0402_part_a.py +0 -0
  732. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0402_part_b.py +0 -0
  733. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0403_part_a.py +0 -0
  734. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0403_part_b.py +0 -0
  735. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0403_part_c.py +0 -0
  736. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0404_part_a.py +0 -0
  737. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0404_part_b.py +0 -0
  738. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0405_part_a.py +0 -0
  739. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0406_part_a.py +0 -0
  740. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0410_part_a.py +0 -0
  741. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0410_part_b.py +0 -0
  742. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0410_part_c.py +0 -0
  743. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0420.py +0 -0
  744. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0430_part_a.py +0 -0
  745. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0430_part_b.py +0 -0
  746. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0430_part_c.py +0 -0
  747. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0430_part_d.py +0 -0
  748. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0440_part_a.py +0 -0
  749. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0440_part_b.py +0 -0
  750. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0440_part_c.py +0 -0
  751. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0440_part_d.py +0 -0
  752. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0440_review_followups.py +0 -0
  753. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0450.py +0 -0
  754. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0460_part_a.py +0 -0
  755. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0460_part_b.py +0 -0
  756. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0470_part_a.py +0 -0
  757. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0470_part_b.py +0 -0
  758. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0480_part_a.py +0 -0
  759. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0480_part_b.py +0 -0
  760. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0490.py +0 -0
  761. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0500_part_a.py +0 -0
  762. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0500_part_b.py +0 -0
  763. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0500_part_c.py +0 -0
  764. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0500_part_d.py +0 -0
  765. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0500_part_e.py +0 -0
  766. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0510.py +0 -0
  767. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0520.py +0 -0
  768. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0530.py +0 -0
  769. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v05310.py +0 -0
  770. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v05311.py +0 -0
  771. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0531_109.py +0 -0
  772. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0531_139.py +0 -0
  773. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0531_142.py +0 -0
  774. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0531_82.py +0 -0
  775. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0532.py +0 -0
  776. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0533.py +0 -0
  777. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0534.py +0 -0
  778. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0535.py +0 -0
  779. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0536.py +0 -0
  780. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0537.py +0 -0
  781. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0538.py +0 -0
  782. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0539.py +0 -0
  783. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0540.py +0 -0
  784. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0550.py +0 -0
  785. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0550_followups.py +0 -0
  786. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0560.py +0 -0
  787. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0570_part_a.py +0 -0
  788. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0570_part_b.py +0 -0
  789. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0570_part_c.py +0 -0
  790. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0570_part_d.py +0 -0
  791. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0580.py +0 -0
  792. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0590.py +0 -0
  793. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0600_part_a.py +0 -0
  794. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0600_part_b.py +0 -0
  795. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0600_part_c.py +0 -0
  796. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0600_part_d.py +0 -0
  797. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0600_part_e.py +0 -0
  798. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0600_part_f.py +0 -0
  799. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0610_part_a.py +0 -0
  800. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0610_part_b.py +0 -0
  801. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0610_part_c.py +0 -0
  802. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0610_part_d.py +0 -0
  803. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0610_part_e.py +0 -0
  804. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0620_followups.py +0 -0
  805. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0620_part_a.py +0 -0
  806. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0620_part_b.py +0 -0
  807. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0620_part_c.py +0 -0
  808. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0620_part_d.py +0 -0
  809. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0620_part_e.py +0 -0
  810. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0630_followups.py +0 -0
  811. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0630_part_a.py +0 -0
  812. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0630_part_b.py +0 -0
  813. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0630_part_c.py +0 -0
  814. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0630_part_d.py +0 -0
  815. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0630_part_e.py +0 -0
  816. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0631_206.py +0 -0
  817. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0640_followups.py +0 -0
  818. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0640_part_a.py +0 -0
  819. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0640_part_b.py +0 -0
  820. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0640_part_c.py +0 -0
  821. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0640_part_d.py +0 -0
  822. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0640_part_e.py +0 -0
  823. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0640_part_f.py +0 -0
  824. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0650_followups.py +0 -0
  825. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0650_part_a.py +0 -0
  826. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0650_part_b.py +0 -0
  827. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0650_part_c.py +0 -0
  828. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0650_part_d.py +0 -0
  829. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0650_part_e.py +0 -0
  830. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0660_cli.py +0 -0
  831. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0660_followups.py +0 -0
  832. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0660_part_a.py +0 -0
  833. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0660_part_b.py +0 -0
  834. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0660_part_c.py +0 -0
  835. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0660_part_d.py +0 -0
  836. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0660_part_e.py +0 -0
  837. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0670_followups.py +0 -0
  838. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0670_part_a.py +0 -0
  839. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0670_part_b.py +0 -0
  840. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0670_part_c.py +0 -0
  841. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0670_part_d.py +0 -0
  842. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0670_part_e.py +0 -0
  843. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0670_part_f.py +0 -0
  844. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0680_followups.py +0 -0
  845. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0680_part_a.py +0 -0
  846. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0680_part_b.py +0 -0
  847. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0680_part_c.py +0 -0
  848. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0680_part_d.py +0 -0
  849. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0680_part_e.py +0 -0
  850. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0690_part_a.py +0 -0
  851. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0690_part_b.py +0 -0
  852. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0690_part_c.py +0 -0
  853. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0690_part_d.py +0 -0
  854. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0690_part_e.py +0 -0
  855. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0700_part_a.py +0 -0
  856. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0700_part_b.py +0 -0
  857. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0700_part_c.py +0 -0
  858. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0700_part_d.py +0 -0
  859. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0700_part_e.py +0 -0
  860. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0700_part_f.py +0 -0
  861. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07110.py +0 -0
  862. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07111.py +0 -0
  863. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07112.py +0 -0
  864. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07113.py +0 -0
  865. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07114.py +0 -0
  866. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07115.py +0 -0
  867. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07116.py +0 -0
  868. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07117.py +0 -0
  869. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07118.py +0 -0
  870. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07119.py +0 -0
  871. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0712.py +0 -0
  872. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07120.py +0 -0
  873. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07121.py +0 -0
  874. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07122.py +0 -0
  875. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07123.py +0 -0
  876. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07124.py +0 -0
  877. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07126.py +0 -0
  878. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07127.py +0 -0
  879. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07128.py +0 -0
  880. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07129.py +0 -0
  881. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0713.py +0 -0
  882. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07130.py +0 -0
  883. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07131.py +0 -0
  884. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07132.py +0 -0
  885. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07133.py +0 -0
  886. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07134.py +0 -0
  887. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v07135.py +0 -0
  888. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0714.py +0 -0
  889. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0715.py +0 -0
  890. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0716.py +0 -0
  891. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0717.py +0 -0
  892. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0718.py +0 -0
  893. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_v0719.py +0 -0
  894. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_validator.py +0 -0
  895. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_vision.py +0 -0
  896. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_vllm_serve.py +0 -0
  897. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_warmup.py +0 -0
  898. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_why.py +0 -0
  899. {soup_cli-0.71.36 → soup_cli-0.71.38}/tests/test_windows_encoding.py +0 -0
@@ -12,6 +12,87 @@ reproducing 70+ versions of notes.
12
12
 
13
13
  ## [Unreleased]
14
14
 
15
+ ## [0.71.38] - 2026-07-17
16
+
17
+ **`soup ship`'s regression leg now has teeth.** Leg 2 (the catastrophic-forgetting
18
+ / regression gate that carries the whole SHIP / DON'T-SHIP claim) was 15
19
+ hand-written trivia prompts scored by case-insensitive **substring** containment
20
+ — it scored `"B"` for "**B**erlin", `"ok"` for "lo**ok**", `"3"` for "1**3**", and
21
+ had **zero** items for tool-calling, safety, or JSON validity. This release makes
22
+ the gate real: a fixed, extraction-based scorer + bundled, offline, zero-dep eval
23
+ suites that catch a regression the old gate waved through.
24
+
25
+ ### Changed
26
+
27
+ - **Fixed answer scorer (breaking — verdicts can change).** `soup ship`'s leg-2
28
+ MCQ / instruction / arithmetic answers are now scored by answer-**extraction**
29
+ + a boundary-aware match, replacing the raw substring test. A spurious
30
+ substring inside another word ("Berlin", "look", "13") no longer scores a
31
+ correct answer, so an existing run's verdict may flip — intentionally, because
32
+ the old gate was reporting false negatives.
33
+ - **Bundled, offline general suite.** The default `--general-suite` is now seven
34
+ hand-authored suites shipped in the wheel: `mini_mmlu` / `mini_common_sense` /
35
+ `mini_instruction` (expanded), a new `mini_arithmetic`, and three behavioural
36
+ suites the old gate had no coverage for — `mini_tool_call` (function-calling),
37
+ `mini_format_json` (JSON validity), and `mini_safety` (refusal-rate). Each is
38
+ scored to a per-model absolute score by the pure scorers Soup already ships
39
+ (`eval/custom`, `utils/diagnose`); no lm-eval, no network, no download. Every
40
+ suite is large enough that a single-item flip (1/N < 0.05) trips the default
41
+ threshold instead of being rounded away.
42
+ - **`soup ship` exit codes: usage errors moved 2 → 3.** Exit `2` now means only
43
+ DON'T-SHIP; a typo'd flag or bad `--general-suite` exits `3` (mirroring
44
+ `soup plan` / `soup env check`), so CI can tell a config error from a caught
45
+ regression. Offline `--evidence` read/parse errors stay `1`. **Breaking** for
46
+ anyone parsing exit `2` as "usage error".
47
+
48
+ ### Fixed
49
+
50
+ - `soup ship` help + docstrings no longer describe `--task-mode pairwise` as
51
+ "reserved for a later release" (it shipped in v0.71.31); the dead
52
+ `SUPPORTED_TASK_MODES` gate is removed.
53
+ - `soup diagnose`'s package docstring said "Six" probes (there are seven —
54
+ citation) and pointed live loading at an unshipped version; it now re-exports
55
+ all seven `score_*` probe functions so callers need not reach into submodules.
56
+
57
+ ## [0.71.37] - 2026-07-17
58
+
59
+ **Every `pip install soup-cli[extra]` command now works on Windows `cmd.exe`**, and
60
+ eval-gate benchmark tasks run instead of always failing.
61
+
62
+ ### Fixed
63
+
64
+ - **Install hints are now quoted so they work in every shell.** Soup printed
65
+ `pip install 'soup-cli[ui]'` — bash / zsh / PowerShell syntax. `cmd.exe` has no
66
+ single-quote quoting, so it hands the quotes to pip verbatim and pip refuses:
67
+
68
+ ```
69
+ ERROR: Invalid requirement: "'soup-cli[train]'": Expected package name at the start of dependency specifier
70
+ ```
71
+
72
+ Every hint, README command, and docs example now uses `pip install
73
+ "soup-cli[extra]"`, which works in cmd, PowerShell, bash, and zsh alike — the
74
+ same spelling the repo already used for `pip install -e ".[dev]"`. Measured on
75
+ Windows: single quotes fail only on `cmd.exe`; double quotes pass everywhere;
76
+ dropping the quotes passes on Windows but breaks zsh, which globs the bracket.
77
+
78
+ Nothing in Soup can rescue the command after it is typed — pip and the shell
79
+ own it, and Soup is not installed yet when the README command runs — so the
80
+ fix is the spelling we print. A regression test now scans the package and every
81
+ docs code block for the single-quoted form.
82
+
83
+ If you followed an older tutorial and hit `Invalid requirement`, swap the `'`
84
+ for `"`; nothing is wrong with the package.
85
+
86
+ - **Eval-gate `type: benchmark` tasks now actually run.** `eval/gate.py` probed
87
+ for a `forgetting.run_mini_benchmark` helper that never existed, so every
88
+ `type: benchmark` task in a gate suite failed 100% of the time — while
89
+ advising an `[eval]` extras install that could not fix it. The gate now calls
90
+ `ForgettingDetector` directly (the same way `soup ship` already did), and an
91
+ unknown benchmark name fails with the list of valid names. Thanks
92
+ [@Sanjays2402](https://github.com/Sanjays2402)!
93
+ ([#315](https://github.com/MakazhanAlpamys/Soup/pull/315), closes
94
+ [#310](https://github.com/MakazhanAlpamys/Soup/issues/310))
95
+
15
96
  ## [0.71.36] - 2026-07-16
16
97
 
17
98
  **Data Moat II** — a semantic layer over your training data, plus two tools for
@@ -120,7 +120,7 @@ src/soup_cli/
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 (314 files, 16283 tests)
123
+ tests/ - Test suite (316 files, 16330 tests)
124
124
  examples/ - Real-world config examples and datasets
125
125
  ```
126
126
 
@@ -52,6 +52,8 @@ Listed by first contribution. PR numbers link the work.
52
52
  - Honor configured vocab expansion in the ORPO / SimPO / GRPO trainers ([#295](https://github.com/MakazhanAlpamys/Soup/pull/295))
53
53
  - **Ekaanksh Patil** ([@Ekaanksh-dev](https://github.com/Ekaanksh-dev))
54
54
  - Batch the PRM reward forward pass in `PRMScorer.__call__` (single `[B, T]` forward) ([#301](https://github.com/MakazhanAlpamys/Soup/pull/301))
55
+ - **Sanjay Santhanam** ([@Sanjays2402](https://github.com/Sanjays2402))
56
+ - Run built-in benchmark gate tasks through `ForgettingDetector` — every `type: benchmark` eval-gate task had always failed ([#315](https://github.com/MakazhanAlpamys/Soup/pull/315))
55
57
 
56
58
  ---
57
59
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: soup-cli
3
- Version: 0.71.36
3
+ Version: 0.71.38
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
@@ -176,7 +176,7 @@ Description-Content-Type: text/markdown
176
176
  Soup turns the pain of LLM fine-tuning into a simple workflow. One config, one command, done.
177
177
 
178
178
  ```bash
179
- pip install 'soup-cli[train]' # add [train] to fine-tune; bare `soup-cli` is the light CLI
179
+ pip install "soup-cli[train]" # add [train] to fine-tune; bare `soup-cli` is the light CLI
180
180
  soup init --template chat
181
181
  soup train
182
182
  ```
@@ -193,38 +193,45 @@ infrastructure instead of improving models. Soup fixes that.
193
193
 
194
194
  ## What's New
195
195
 
196
- **v0.71.36Data Moat II.** A semantic layer over your training data, plus two tools for what a fine-tune forgets and what it leaks.
197
-
198
- - **`soup data dedup --semantic`** dedup by meaning, not by shared tokens. Catches
199
- *reworded* duplicates MinHash's shingling scores as distinct. Zero new dependencies.
200
- - **`soup data topics <data>`** cluster your data and get a coverage table
201
- (`82% code · 6% math · 1% safety`) with a warning for thin topics, so you can see what
202
- you are actually training on.
203
- - **`soup data canary insert|check`**insert unique secrets, then prove whether a model
204
- memorized them: each secret's loss is ranked against never-inserted controls. Exit 2 on a
205
- leak, so CI can gate. On SmolLM2-135M a memorized set lands at percentile 0.0 against a
206
- clean model's 4%–93% spread.
207
- - **`soup train --replay old.jsonl`** continual-learning rehearsal: interleave your old
208
- data so the new task doesn't erase it.
209
- - **Honest result:** semantic dedup is **not** a paraphrase detector. Measured, paraphrase
210
- cosines (0.49–0.76) *overlap* with genuinely-distinct rows (0.54–0.76) "Add two numbers"
211
- vs "Multiply two numbers" scores **higher** than a real paraphrase — so no threshold
212
- separates them. The default is deliberately conservative; see the CHANGELOG.
213
- - **Two blocking bugs fixed:** the hardware-fit gate **refused to train any model you merged
214
- yourself** (a local checkpoint's name has no size marker, so it guessed 7B and predicted
215
- 16 GB), and every `pip install 'soup-cli[extra]'` hint printed **without the extra** —
216
- 17 sites where the suggested command succeeds and leaves the feature still broken.
196
+ **v0.71.38The gate grows teeth.** `soup ship` answers the one question that matters after a fine-tune *did my task improve WITHOUT silently breaking everything else?* This release makes the "without breaking everything else" half real.
197
+
198
+ - **A gate that actually catches regressions.** The regression leg used to be 15 trivia
199
+ prompts scored by raw substring it credited `"B"` for "**B**erlin", `"3"` for "1**3**", and
200
+ had **zero** items for tool-calling, safety, or JSON. Now it's a fixed, extraction-based
201
+ scorer over seven bundled, offline suites (MCQ · arithmetic · **tool-calling** · **JSON
202
+ validity** · **safety/refusal**). A tune that WINS your task but quietly breaks tool-calling
203
+ now gets a **DON'T SHIP**the old gate waved it through.
204
+ - **Zero new dependencies, no network.** Every suite ships in the wheel and is scored by the
205
+ pure scorers Soup already has no lm-eval, no download. `soup ci init`'s core-only gate keeps
206
+ working.
207
+ - **Distinct exit codes for CI.** Usage errors moved off exit `2` to `3`, so `2` now means only
208
+ DON'T-SHIP a typo'd flag is no longer indistinguishable from a caught regression.
209
+ - **Breaking, on purpose.** The fixed scorer can change an existing run's verdict — because the
210
+ old one was reporting false negatives. Recompute any committed `--baseline`.
217
211
 
218
212
  ```bash
219
- soup data topics train.jsonl # what am I actually training on?
220
- soup data dedup train.jsonl --semantic -o clean.jsonl
213
+ # leg 1 (task win) AND leg 2 (no regression on the bundled suite) -> one verdict
214
+ soup ship --base ./base --adapter ./my-lora --task-eval my_task.jsonl
215
+ # exit 0 = SHIP · 2 = DON'T SHIP · 3 = bad flags · 1 = runtime error
221
216
 
222
- soup data canary insert train.jsonl -o canaried.jsonl --manifest secrets.json
223
- soup data canary check --manifest secrets.json --base ./my-model # exit 2 = leak
217
+ soup ship --evidence scores.json # offline verdict from pre-computed scores
218
+ ```
219
+
220
+ <details>
221
+ <summary>Previous release — v0.71.36, Data Moat II (semantic dedup · topics · canaries · replay)</summary>
224
222
 
223
+ `soup data dedup --semantic` dedups by meaning; `soup data topics` shows a coverage table;
224
+ `soup data canary insert|check` proves whether a model memorized inserted secrets (exit 2 on a
225
+ leak); `soup train --replay old.jsonl` interleaves old data so a new task doesn't erase it.
226
+
227
+ ```bash
228
+ soup data topics train.jsonl
229
+ soup data canary check --manifest secrets.json --base ./my-model # exit 2 = leak
225
230
  soup train --config sft.yaml --replay old_task.jsonl --replay-ratio 0.1
226
231
  ```
227
232
 
233
+ </details>
234
+
228
235
  <details>
229
236
  <summary>Previous release — v0.71.33, <code>soup draft</code> (measure speculative decoding)</summary>
230
237
 
@@ -248,11 +255,38 @@ Full history: [CHANGELOG.md](CHANGELOG.md) &middot; [GitHub Releases](https://gi
248
255
  ### 1. Install
249
256
 
250
257
  ```bash
251
- pip install soup-cli # light: CLI + config + data tools (no PyTorch)
252
- pip install 'soup-cli[train]' # add the training stack (torch, transformers, peft, trl, …)
253
- pip install git+https://github.com/MakazhanAlpamys/Soup.git # latest dev
258
+ # Light core: CLI + config + data tools, no PyTorch
259
+ pip install soup-cli
260
+
261
+ # Add the training stack (torch, transformers, peft, trl, datasets, …)
262
+ pip install "soup-cli[train]"
263
+
264
+ # Everything (train + serve + ui + data) in one shot
265
+ pip install "soup-cli[all]"
266
+
267
+ # Or from GitHub (latest dev)
268
+ pip install git+https://github.com/MakazhanAlpamys/Soup.git
254
269
  ```
255
270
 
271
+ The full extras table (`fast`, `mlx`, `serve`, `eval`, `ui`, `vision`, `audio`, …) lives in
272
+ [`docs/models.md`](docs/models.md#optional-extras).
273
+
274
+ > **Use double quotes around the extra.** They are the only spelling that works in
275
+ > every shell — `cmd.exe`, PowerShell, bash, and zsh.
276
+ >
277
+ > Older tutorials and videos (including some of ours) show the single-quoted
278
+ > `pip install 'soup-cli[train]'`. That is bash / zsh / PowerShell syntax, and it
279
+ > fails on Windows `cmd.exe`, which has no single-quote quoting and hands the
280
+ > quotes straight to pip:
281
+ >
282
+ > ```
283
+ > ERROR: Invalid requirement: "'soup-cli[train]'": Expected package name at the start of dependency specifier
284
+ > ```
285
+ >
286
+ > If you hit that, swap the `'` for `"` — pip is rejecting a literal quote
287
+ > character, nothing is wrong with the package. (Dropping the quotes entirely
288
+ > works on Windows too, but zsh then reads `[train]` as a glob and fails.)
289
+
256
290
  `soup init`, `soup data …`, and the other data/inspection commands work on the light install.
257
291
  Fine-tuning (`soup train`) needs the `[train]` extra.
258
292
 
@@ -287,7 +321,7 @@ A complete `soup.yaml`:
287
321
  ```yaml
288
322
  base: meta-llama/Llama-3.1-8B-Instruct
289
323
  task: sft
290
- # backend: unsloth # 2-5x faster, pip install 'soup-cli[fast]'
324
+ # backend: unsloth # 2-5x faster, pip install "soup-cli[fast]"
291
325
 
292
326
  data:
293
327
  train: ./data/train.jsonl
@@ -32,7 +32,7 @@
32
32
  Soup turns the pain of LLM fine-tuning into a simple workflow. One config, one command, done.
33
33
 
34
34
  ```bash
35
- pip install 'soup-cli[train]' # add [train] to fine-tune; bare `soup-cli` is the light CLI
35
+ pip install "soup-cli[train]" # add [train] to fine-tune; bare `soup-cli` is the light CLI
36
36
  soup init --template chat
37
37
  soup train
38
38
  ```
@@ -49,38 +49,45 @@ infrastructure instead of improving models. Soup fixes that.
49
49
 
50
50
  ## What's New
51
51
 
52
- **v0.71.36Data Moat II.** A semantic layer over your training data, plus two tools for what a fine-tune forgets and what it leaks.
53
-
54
- - **`soup data dedup --semantic`** dedup by meaning, not by shared tokens. Catches
55
- *reworded* duplicates MinHash's shingling scores as distinct. Zero new dependencies.
56
- - **`soup data topics <data>`** cluster your data and get a coverage table
57
- (`82% code · 6% math · 1% safety`) with a warning for thin topics, so you can see what
58
- you are actually training on.
59
- - **`soup data canary insert|check`**insert unique secrets, then prove whether a model
60
- memorized them: each secret's loss is ranked against never-inserted controls. Exit 2 on a
61
- leak, so CI can gate. On SmolLM2-135M a memorized set lands at percentile 0.0 against a
62
- clean model's 4%–93% spread.
63
- - **`soup train --replay old.jsonl`** continual-learning rehearsal: interleave your old
64
- data so the new task doesn't erase it.
65
- - **Honest result:** semantic dedup is **not** a paraphrase detector. Measured, paraphrase
66
- cosines (0.49–0.76) *overlap* with genuinely-distinct rows (0.54–0.76) "Add two numbers"
67
- vs "Multiply two numbers" scores **higher** than a real paraphrase — so no threshold
68
- separates them. The default is deliberately conservative; see the CHANGELOG.
69
- - **Two blocking bugs fixed:** the hardware-fit gate **refused to train any model you merged
70
- yourself** (a local checkpoint's name has no size marker, so it guessed 7B and predicted
71
- 16 GB), and every `pip install 'soup-cli[extra]'` hint printed **without the extra** —
72
- 17 sites where the suggested command succeeds and leaves the feature still broken.
52
+ **v0.71.38The gate grows teeth.** `soup ship` answers the one question that matters after a fine-tune *did my task improve WITHOUT silently breaking everything else?* This release makes the "without breaking everything else" half real.
53
+
54
+ - **A gate that actually catches regressions.** The regression leg used to be 15 trivia
55
+ prompts scored by raw substring it credited `"B"` for "**B**erlin", `"3"` for "1**3**", and
56
+ had **zero** items for tool-calling, safety, or JSON. Now it's a fixed, extraction-based
57
+ scorer over seven bundled, offline suites (MCQ · arithmetic · **tool-calling** · **JSON
58
+ validity** · **safety/refusal**). A tune that WINS your task but quietly breaks tool-calling
59
+ now gets a **DON'T SHIP**the old gate waved it through.
60
+ - **Zero new dependencies, no network.** Every suite ships in the wheel and is scored by the
61
+ pure scorers Soup already has no lm-eval, no download. `soup ci init`'s core-only gate keeps
62
+ working.
63
+ - **Distinct exit codes for CI.** Usage errors moved off exit `2` to `3`, so `2` now means only
64
+ DON'T-SHIP a typo'd flag is no longer indistinguishable from a caught regression.
65
+ - **Breaking, on purpose.** The fixed scorer can change an existing run's verdict — because the
66
+ old one was reporting false negatives. Recompute any committed `--baseline`.
73
67
 
74
68
  ```bash
75
- soup data topics train.jsonl # what am I actually training on?
76
- soup data dedup train.jsonl --semantic -o clean.jsonl
69
+ # leg 1 (task win) AND leg 2 (no regression on the bundled suite) -> one verdict
70
+ soup ship --base ./base --adapter ./my-lora --task-eval my_task.jsonl
71
+ # exit 0 = SHIP · 2 = DON'T SHIP · 3 = bad flags · 1 = runtime error
77
72
 
78
- soup data canary insert train.jsonl -o canaried.jsonl --manifest secrets.json
79
- soup data canary check --manifest secrets.json --base ./my-model # exit 2 = leak
73
+ soup ship --evidence scores.json # offline verdict from pre-computed scores
74
+ ```
75
+
76
+ <details>
77
+ <summary>Previous release — v0.71.36, Data Moat II (semantic dedup · topics · canaries · replay)</summary>
80
78
 
79
+ `soup data dedup --semantic` dedups by meaning; `soup data topics` shows a coverage table;
80
+ `soup data canary insert|check` proves whether a model memorized inserted secrets (exit 2 on a
81
+ leak); `soup train --replay old.jsonl` interleaves old data so a new task doesn't erase it.
82
+
83
+ ```bash
84
+ soup data topics train.jsonl
85
+ soup data canary check --manifest secrets.json --base ./my-model # exit 2 = leak
81
86
  soup train --config sft.yaml --replay old_task.jsonl --replay-ratio 0.1
82
87
  ```
83
88
 
89
+ </details>
90
+
84
91
  <details>
85
92
  <summary>Previous release — v0.71.33, <code>soup draft</code> (measure speculative decoding)</summary>
86
93
 
@@ -104,11 +111,38 @@ Full history: [CHANGELOG.md](CHANGELOG.md) &middot; [GitHub Releases](https://gi
104
111
  ### 1. Install
105
112
 
106
113
  ```bash
107
- pip install soup-cli # light: CLI + config + data tools (no PyTorch)
108
- pip install 'soup-cli[train]' # add the training stack (torch, transformers, peft, trl, …)
109
- pip install git+https://github.com/MakazhanAlpamys/Soup.git # latest dev
114
+ # Light core: CLI + config + data tools, no PyTorch
115
+ pip install soup-cli
116
+
117
+ # Add the training stack (torch, transformers, peft, trl, datasets, …)
118
+ pip install "soup-cli[train]"
119
+
120
+ # Everything (train + serve + ui + data) in one shot
121
+ pip install "soup-cli[all]"
122
+
123
+ # Or from GitHub (latest dev)
124
+ pip install git+https://github.com/MakazhanAlpamys/Soup.git
110
125
  ```
111
126
 
127
+ The full extras table (`fast`, `mlx`, `serve`, `eval`, `ui`, `vision`, `audio`, …) lives in
128
+ [`docs/models.md`](docs/models.md#optional-extras).
129
+
130
+ > **Use double quotes around the extra.** They are the only spelling that works in
131
+ > every shell — `cmd.exe`, PowerShell, bash, and zsh.
132
+ >
133
+ > Older tutorials and videos (including some of ours) show the single-quoted
134
+ > `pip install 'soup-cli[train]'`. That is bash / zsh / PowerShell syntax, and it
135
+ > fails on Windows `cmd.exe`, which has no single-quote quoting and hands the
136
+ > quotes straight to pip:
137
+ >
138
+ > ```
139
+ > ERROR: Invalid requirement: "'soup-cli[train]'": Expected package name at the start of dependency specifier
140
+ > ```
141
+ >
142
+ > If you hit that, swap the `'` for `"` — pip is rejecting a literal quote
143
+ > character, nothing is wrong with the package. (Dropping the quotes entirely
144
+ > works on Windows too, but zsh then reads `[train]` as a glob and fails.)
145
+
112
146
  `soup init`, `soup data …`, and the other data/inspection commands work on the light install.
113
147
  Fine-tuning (`soup train`) needs the `[train]` extra.
114
148
 
@@ -143,7 +177,7 @@ A complete `soup.yaml`:
143
177
  ```yaml
144
178
  base: meta-llama/Llama-3.1-8B-Instruct
145
179
  task: sft
146
- # backend: unsloth # 2-5x faster, pip install 'soup-cli[fast]'
180
+ # backend: unsloth # 2-5x faster, pip install "soup-cli[fast]"
147
181
 
148
182
  data:
149
183
  train: ./data/train.jsonl
@@ -79,7 +79,7 @@ Fine-tune on M1-M4 Macs via Apple's [MLX](https://github.com/ml-explore/mlx) fra
79
79
 
80
80
  ```bash
81
81
  # Install MLX support
82
- pip install 'soup-cli[mlx]'
82
+ pip install "soup-cli[mlx]"
83
83
  ```
84
84
 
85
85
  ```yaml
@@ -108,7 +108,7 @@ Use the [Unsloth](https://github.com/unslothai/unsloth) backend for significantl
108
108
 
109
109
  ```bash
110
110
  # Install unsloth support
111
- pip install 'soup-cli[fast]'
111
+ pip install "soup-cli[fast]"
112
112
  ```
113
113
 
114
114
  Then add one line to your config:
@@ -143,7 +143,7 @@ app from your `soup.yaml` for serverless, per-second-billed GPU training. The co
143
143
  base64-embedded as **data** — no code interpolation, no secrets in the generated stub.
144
144
 
145
145
  ```bash
146
- pip install 'soup-cli[modal]' # only needed for live submit
146
+ pip install "soup-cli[modal]" # only needed for live submit
147
147
 
148
148
  # Plan-only (default): write the stub + print the `modal run` command.
149
149
  soup train --config soup.yaml --cloud modal --gpu a100
@@ -585,7 +585,7 @@ Full-screen Textual dashboard. Two-pane: run list (left) + selected-run detail
585
585
  (right). `r` refreshes, `q` quits.
586
586
 
587
587
  ```bash
588
- pip install 'soup-cli[tui]'
588
+ pip install "soup-cli[tui]"
589
589
  soup tui --refresh 1.0 --limit 50
590
590
  ```
591
591
 
@@ -160,11 +160,12 @@ soup runs show <run_id> Run details + loss graph + cost
160
160
  soup runs compare <run_1> <run_2> Compare two runs
161
161
  soup runs replay <run_id> Replay summary + loss curve from history (also plots a benchmark-score curve when the metric lives in eval_results)
162
162
  soup why [run_id] Explain training anomalies (heuristic)
163
- soup ship --base <m> --adapter <lora> --task-eval t.jsonl SHIP / DON'T-SHIP verdict: task win AND no forgetting (exit 0=SHIP / 2=DON'T / 1=error) (v0.71.25)
163
+ soup ship --base <m> --adapter <lora> --task-eval t.jsonl SHIP / DON'T-SHIP verdict: task win AND no regression on the bundled suite (exit 0=SHIP / 2=DON'T / 3=usage / 1=runtime) (v0.71.25; leg-2 real + usage-off-2 v0.71.38)
164
164
  soup ship --evidence ev.json [--output v.json] Decide offline from pre-computed scores (no model load)
165
165
  soup ship ... --task-mode judge_score --judge-model ollama://llama3.1 Leg-1 via LLM-as-a-judge
166
166
  soup ship ... --task-mode pairwise --judge-model ollama://llama3.1 Leg-1 via swap-debiased judge win-rate (base=0.5) (v0.71.31)
167
- soup ship ... --general-suite mmlu,gsm8k --baseline base.json lm-eval leg-2 + recorded base scores
167
+ soup ship ... # leg-2 default = 7 bundled offline suites (MCQ/arithmetic + tool_call/format_json/safety, extraction scorer, ~40 items each) (v0.71.38)
168
+ soup ship ... --general-suite mmlu,gsm8k --baseline base.json lm-eval leg-2 override + recorded base scores
168
169
  soup card <registry-id> -o MODELCARD.md HF model card from a registry entry: training config, evals, hashes, lineage, artifacts (v0.71.35)
169
170
  soup push --model ./out --repo you/m --card <registry-id> Upload that registry-driven card as the README (HF only) (v0.71.35)
170
171
  soup ci init [--data d.jsonl --suite s.yaml --evidence ev.json] [--branch main --python 3.11] [--force] Write .github/workflows/soup-gate.yml: data validate -> expect -> ship gate on every PR (v0.71.35)
@@ -255,9 +256,9 @@ soup adapters bisect <ckpt>... --eval-command "..." Binary search over training
255
256
  soup lock write --base-sha <h> --dataset-sha <h> --env-hash <h> Write soup.lock (v0.67.0)
256
257
  soup lock write --base-sha <h> --dataset-sha <h> --env-lock soup-env.lock Auto-derive --env-hash from soup-env.lock (v0.71.1)
257
258
  soup lock show / soup lock check Show + drift-check (exit 3 on drift)
258
- soup compile <program.py> --eval <suite> [--optimizer mipro|gepa|textgrad|copro|bootstrap_fewshot] [--plan-only] DSPy / GEPA / TextGrad prompt-program compiler — live (v0.71.13; pip install 'soup-cli[compile]')
259
+ soup compile <program.py> --eval <suite> [--optimizer mipro|gepa|textgrad|copro|bootstrap_fewshot] [--plan-only] DSPy / GEPA / TextGrad prompt-program compiler — live (v0.71.13; pip install "soup-cli[compile]")
259
260
  soup distill-prompt --traces <jsonl> --teacher <m> --student <m> --strategy sft|preference|kl [--provider ollama|anthropic|vllm] [--base-url <url>] [--temperature F] [--max-rows N] Distill prompt-heavy traces via a live teacher (v0.71.13)
260
- soup compile-tools <spec.json|yaml> --eval <jsonl> [--optimizer textgrad|gepa] [--plan-only] TextGrad / GEPA tool-schema optimiser — live (v0.71.13; pip install 'soup-cli[compile]')
261
+ soup compile-tools <spec.json|yaml> --eval <jsonl> [--optimizer textgrad|gepa] [--plan-only] TextGrad / GEPA tool-schema optimiser — live (v0.71.13; pip install "soup-cli[compile]")
261
262
  soup apple-adapter <source-dir> --direction hf-to-mlx|mlx-to-hf|hf-to-apple|mlx-to-apple --output <dir> [--sign] [--plan-only] PEFT LoRA <-> mlx-lm adapter conversion — live (v0.71.21; *-to-apple upstream-gated exit 3)
262
263
  soup local-rl init --db <path> Create personal-LLM flywheel SQLite schema (v0.68.0)
263
264
  soup local-rl status --db <path> Print interactions / thumbs-up / thumbs-down counters
@@ -299,7 +300,7 @@ server over **stdio**, so any MCP client — Claude Code, Cursor, Cline, Continu
299
300
  can drive Soup conversationally. Install the extra first:
300
301
 
301
302
  ```bash
302
- pip install 'soup-cli[mcp]'
303
+ pip install "soup-cli[mcp]"
303
304
  ```
304
305
 
305
306
  Register it with your client. For **Claude Code** (`.mcp.json` in the repo) or
@@ -337,7 +337,7 @@ soup data generate --prompt "..." --validate
337
337
  # Auto-filter by quality (coherence scoring)
338
338
  soup data generate --prompt "..." --filter
339
339
 
340
- # Auto-dedup (MinHash, requires: pip install 'soup-cli[data]')
340
+ # Auto-dedup (MinHash, requires: pip install "soup-cli[data]")
341
341
  soup data generate --prompt "..." --dedup
342
342
 
343
343
  # Full quality pipeline: validate + filter + dedup
@@ -591,7 +591,7 @@ soup data convert ./data/train.jsonl --to sharegpt --output converted.jsonl
591
591
  # Merge multiple datasets
592
592
  soup data merge data1.jsonl data2.jsonl --output merged.jsonl --shuffle
593
593
 
594
- # Remove near-duplicates (requires: pip install 'soup-cli[data]')
594
+ # Remove near-duplicates (requires: pip install "soup-cli[data]")
595
595
  soup data dedup ./data/train.jsonl --threshold 0.8
596
596
 
597
597
  # Extended statistics (length distribution, token counts, languages)
@@ -814,7 +814,7 @@ Five checks: `length_bias` — the **#1 silent DPO degradation**: `chosen`
814
814
  systematically longer than `rejected`, reported as a Cohen's d effect size —
815
815
  `label_imbalance` (KTO desirable:undesirable ratio), `near_duplicates`
816
816
  (MinHash/LSH, reuses the `soup data dedup` kernel; requires
817
- `pip install 'soup-cli[data]'`, degrades to an advisory skip otherwise),
817
+ `pip install "soup-cli[data]"`, degrades to an advisory skip otherwise),
818
818
  `identical_pairs` (`chosen == rejected` — zero preference signal), and
819
819
  `prompt_leak` (the prompt echoed verbatim inside the completion, a common
820
820
  synthetic-data pipeline bug). Same OK/MINOR/MAJOR taxonomy and exit codes as
@@ -355,11 +355,28 @@ soup ship --evidence evidence.json --output verdict.json
355
355
  }
356
356
  ```
357
357
 
358
- Leg-2 defaults to the built-in mini benchmarks (`mini_mmlu` / `mini_common_sense` /
359
- `mini_instruction`) offline, CPU, instant. `--general-suite <names>` with non-mini names
360
- routes through the lm-eval harness. Pairwise judge win-rate (`--task-mode pairwise`) is planned
361
- for a later release. The engine lives in `soup_cli.utils.ship_verdict` (`decide_ship` is a pure
362
- function the whole truth table is CPU-testable).
358
+ Leg-2 defaults to the **bundled offline suite** (v0.71.38) seven hand-authored suites shipped
359
+ in the wheel and scored by the pure scorers Soup already ships (no lm-eval, no network,
360
+ CPU-instant):
361
+
362
+ | Suite | What it checks | Scorer |
363
+ |-------|----------------|--------|
364
+ | `mini_mmlu` / `mini_common_sense` / `mini_instruction` / `mini_arithmetic` | general knowledge / reasoning / instruction-following / numeracy | answer-extraction + exact/boundary match |
365
+ | `mini_tool_call` | function-calling still works (right tool named) | `tool_call_name_match` |
366
+ | `mini_format_json` | JSON validity (a structured object, not a bare scalar) | container-only JSON check |
367
+ | `mini_safety` | refusal-rate on harmful prompts (under-refusal = regression) | refusal heuristic |
368
+
369
+ Each suite is >20 items so a single-item flip (1/N < 0.05) trips the default threshold instead
370
+ of being rounded away. The scorer is answer-**extraction** — a spurious substring inside a word
371
+ (`"B"` in "**B**erlin") no longer scores, which is a **breaking** change from the v0.25.0
372
+ substring scorer (an existing run's verdict can flip; recompute any committed `--baseline`).
373
+ `--general-suite <names>` with any non-bundled name routes through the lm-eval harness. Pairwise
374
+ judge win-rate (`--task-mode pairwise`) shipped in v0.71.31.
375
+
376
+ Exit codes (v0.71.38): **0 = SHIP · 2 = DON'T SHIP · 3 = usage/flag error · 1 = runtime error**
377
+ — usage errors moved off `2` so CI can tell a config typo from a caught regression. The engine
378
+ lives in `soup_cli.utils.ship_verdict` (`decide_ship` is a pure function — the whole truth table
379
+ is CPU-testable); the bundled suites live in `soup_cli.eval.gate_suites`.
363
380
 
364
381
 
365
382
  ## NLG Evaluation Metrics (BLEU + ROUGE)
@@ -432,7 +449,7 @@ Full-featured evaluation platform with standard benchmarks, custom evals, LLM-as
432
449
 
433
450
  ```bash
434
451
  # Install eval dependencies
435
- pip install 'soup-cli[eval]'
452
+ pip install "soup-cli[eval]"
436
453
 
437
454
  # Standard benchmarks (wraps lm-evaluation-harness)
438
455
  soup eval benchmark --model ./output --benchmarks mmlu,gsm8k,hellaswag
@@ -70,29 +70,29 @@ no PyTorch. Add `[train]` to fine-tune, or install other extras only when you ne
70
70
 
71
71
  | Extra | Install | What it adds |
72
72
  |---|---|---|
73
- | `train` | `pip install 'soup-cli[train]'` | Training stack: torch, transformers, peft, trl, datasets, bitsandbytes, accelerate |
74
- | `all` | `pip install 'soup-cli[all]'` | `train` + `serve` + `ui` + `data` in one shot |
75
- | `fast` | `pip install 'soup-cli[fast]'` | Unsloth backend (2-5x faster, lower VRAM) |
76
- | `vision` | `pip install 'soup-cli[vision]'` | Vision / multimodal fine-tuning (Pillow) |
77
- | `audio` | `pip install 'soup-cli[audio]'` | Audio / speech fine-tuning (librosa, soundfile) |
78
- | `mlx` | `pip install 'soup-cli[mlx]'` | Apple Silicon backend (mlx, mlx-lm) |
79
- | `qat` | `pip install 'soup-cli[qat]'` | Quantization-Aware Training (torchao) |
80
- | `serve` | `pip install 'soup-cli[serve]'` | Inference server (FastAPI + uvicorn) |
81
- | `serve-fast` | `pip install 'soup-cli[serve-fast]'` | vLLM inference backend (2-4x throughput) |
82
- | `sglang` | `pip install 'soup-cli[sglang]'` | SGLang inference backend |
83
- | `ui` | `pip install 'soup-cli[ui]'` | Web UI + inference server |
84
- | `tui` | `pip install 'soup-cli[tui]'` | Full-screen Textual dashboard (`soup tui`) |
85
- | `eval` | `pip install 'soup-cli[eval]'` | Benchmark evaluation (lm-evaluation-harness) |
86
- | `data` | `pip install 'soup-cli[data]'` | Deduplication (MinHash via datasketch) |
87
- | `data-pro` | `pip install 'soup-cli[data-pro]'` | Language detection + PII (langdetect, presidio) |
88
- | `deepspeed` | `pip install 'soup-cli[deepspeed]'` | Multi-GPU training (DeepSpeed ZeRO) |
89
- | `liger` | `pip install 'soup-cli[liger]'` | Liger Kernel fused ops |
90
- | `ring-attn` | `pip install 'soup-cli[ring-attn]'` | Ring FlashAttention (sequence parallelism) |
91
- | `onnx` / `tensorrt` | `pip install 'soup-cli[onnx]'` | ONNX / TensorRT-LLM export |
92
- | `awq` / `gptq` | `pip install 'soup-cli[awq]'` | AWQ / GPTQ quantized export |
93
- | `trackers` | `pip install 'soup-cli[trackers]'` | MLflow / SwanLab / Trackio logging |
94
- | `remote` | `pip install 'soup-cli[remote]'` | Remote datasets (s3 / gs / az / oci) |
95
- | `dev` | `pip install 'soup-cli[dev]'` | Tests + lint + types (pytest, ruff, mypy, pre-commit) |
73
+ | `train` | `pip install "soup-cli[train]"` | Training stack: torch, transformers, peft, trl, datasets, bitsandbytes, accelerate |
74
+ | `all` | `pip install "soup-cli[all]"` | `train` + `serve` + `ui` + `data` in one shot |
75
+ | `fast` | `pip install "soup-cli[fast]"` | Unsloth backend (2-5x faster, lower VRAM) |
76
+ | `vision` | `pip install "soup-cli[vision]"` | Vision / multimodal fine-tuning (Pillow) |
77
+ | `audio` | `pip install "soup-cli[audio]"` | Audio / speech fine-tuning (librosa, soundfile) |
78
+ | `mlx` | `pip install "soup-cli[mlx]"` | Apple Silicon backend (mlx, mlx-lm) |
79
+ | `qat` | `pip install "soup-cli[qat]"` | Quantization-Aware Training (torchao) |
80
+ | `serve` | `pip install "soup-cli[serve]"` | Inference server (FastAPI + uvicorn) |
81
+ | `serve-fast` | `pip install "soup-cli[serve-fast]"` | vLLM inference backend (2-4x throughput) |
82
+ | `sglang` | `pip install "soup-cli[sglang]"` | SGLang inference backend |
83
+ | `ui` | `pip install "soup-cli[ui]"` | Web UI + inference server |
84
+ | `tui` | `pip install "soup-cli[tui]"` | Full-screen Textual dashboard (`soup tui`) |
85
+ | `eval` | `pip install "soup-cli[eval]"` | Benchmark evaluation (lm-evaluation-harness) |
86
+ | `data` | `pip install "soup-cli[data]"` | Deduplication (MinHash via datasketch) |
87
+ | `data-pro` | `pip install "soup-cli[data-pro]"` | Language detection + PII (langdetect, presidio) |
88
+ | `deepspeed` | `pip install "soup-cli[deepspeed]"` | Multi-GPU training (DeepSpeed ZeRO) |
89
+ | `liger` | `pip install "soup-cli[liger]"` | Liger Kernel fused ops |
90
+ | `ring-attn` | `pip install "soup-cli[ring-attn]"` | Ring FlashAttention (sequence parallelism) |
91
+ | `onnx` / `tensorrt` | `pip install "soup-cli[onnx]"` | ONNX / TensorRT-LLM export |
92
+ | `awq` / `gptq` | `pip install "soup-cli[awq]"` | AWQ / GPTQ quantized export |
93
+ | `trackers` | `pip install "soup-cli[trackers]"` | MLflow / SwanLab / Trackio logging |
94
+ | `remote` | `pip install "soup-cli[remote]"` | Remote datasets (s3 / gs / az / oci) |
95
+ | `dev` | `pip install "soup-cli[dev]"` | Tests + lint + types (pytest, ruff, mypy, pre-commit) |
96
96
 
97
97
  The complete, authoritative extras list is in [`pyproject.toml`](../pyproject.toml).
98
98
 
@@ -36,7 +36,7 @@ Train with simulated quantization for significantly better post-quantization qua
36
36
 
37
37
  ```bash
38
38
  # Install QAT support
39
- pip install 'soup-cli[qat]'
39
+ pip install "soup-cli[qat]"
40
40
  ```
41
41
 
42
42
  ```yaml
@@ -71,7 +71,7 @@ QAT works with all training tasks (SFT, DPO, GRPO, PPO, KTO, ORPO, SimPO, IPO, P
71
71
  For H100 / H200 / B100 / B200 GPUs, train with float8 matmuls for ~2x speedup vs bf16 at comparable quality. This extends QAT infrastructure via `torchao.float8`:
72
72
 
73
73
  ```bash
74
- pip install 'soup-cli[qat]' # torchao >= 0.5.0 includes torchao.float8
74
+ pip install "soup-cli[qat]" # torchao >= 0.5.0 includes torchao.float8
75
75
  ```
76
76
 
77
77
  ```yaml
@@ -106,7 +106,7 @@ Bool `true` stays on the int8 QAT path for backward compatibility. FP8 requires
106
106
  Models with 128k+ vocabularies (Llama 3.1, Qwen2) materialise a huge `(batch, seq, vocab)` logits tensor that dominates VRAM. Cut Cross-Entropy computes the loss in chunks instead:
107
107
 
108
108
  ```bash
109
- pip install 'soup-cli[cce]' # or: pip install cut-cross-entropy
109
+ pip install "soup-cli[cce]" # or: pip install cut-cross-entropy
110
110
  ```
111
111
 
112
112
  ```yaml
@@ -368,9 +368,9 @@ data:
368
368
  Install optional performance packages:
369
369
 
370
370
  ```bash
371
- pip install 'soup-cli[liger]' # Liger Kernel fused operations
371
+ pip install "soup-cli[liger]" # Liger Kernel fused operations
372
372
  pip install flash-attn --no-build-isolation # FlashAttention
373
- pip install 'soup-cli[ring-attn]' # Ring FlashAttention (sequence parallelism)
373
+ pip install "soup-cli[ring-attn]" # Ring FlashAttention (sequence parallelism)
374
374
  ```
375
375
 
376
376