soup-cli 0.71.38__tar.gz → 0.71.39__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 (898) hide show
  1. {soup_cli-0.71.38 → soup_cli-0.71.39}/CHANGELOG.md +47 -0
  2. {soup_cli-0.71.38 → soup_cli-0.71.39}/CONTRIBUTING.md +1 -1
  3. {soup_cli-0.71.38 → soup_cli-0.71.39}/PKG-INFO +25 -27
  4. {soup_cli-0.71.38 → soup_cli-0.71.39}/README.md +24 -26
  5. {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/commands.md +4 -1
  6. {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/evaluation.md +30 -0
  7. {soup_cli-0.71.38 → soup_cli-0.71.39}/pyproject.toml +1 -1
  8. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/__init__.py +1 -1
  9. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/ci.py +7 -0
  10. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/ship.py +323 -22
  11. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/config/schema.py +41 -0
  12. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ci_workflow.py +42 -4
  13. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ship_verdict.py +78 -1
  14. soup_cli-0.71.39/tests/test_v07139.py +802 -0
  15. {soup_cli-0.71.38 → soup_cli-0.71.39}/.dockerignore +0 -0
  16. {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/FUNDING.yml +0 -0
  17. {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  18. {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  19. {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  20. {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/pull_request_template.md +0 -0
  21. {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/workflows/ci.yml +0 -0
  22. {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/workflows/docker.yml +0 -0
  23. {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/workflows/publish.yml +0 -0
  24. {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/workflows/recipe-validation.yml +0 -0
  25. {soup_cli-0.71.38 → soup_cli-0.71.39}/.gitignore +0 -0
  26. {soup_cli-0.71.38 → soup_cli-0.71.39}/.mailmap +0 -0
  27. {soup_cli-0.71.38 → soup_cli-0.71.39}/.pre-commit-config.yaml +0 -0
  28. {soup_cli-0.71.38 → soup_cli-0.71.39}/AGENTS.md +0 -0
  29. {soup_cli-0.71.38 → soup_cli-0.71.39}/CODEOWNERS +0 -0
  30. {soup_cli-0.71.38 → soup_cli-0.71.39}/CODE_OF_CONDUCT.md +0 -0
  31. {soup_cli-0.71.38 → soup_cli-0.71.39}/CONTRIBUTORS.md +0 -0
  32. {soup_cli-0.71.38 → soup_cli-0.71.39}/Dockerfile +0 -0
  33. {soup_cli-0.71.38 → soup_cli-0.71.39}/LICENSE +0 -0
  34. {soup_cli-0.71.38 → soup_cli-0.71.39}/NOTICE +0 -0
  35. {soup_cli-0.71.38 → soup_cli-0.71.39}/SECURITY.md +0 -0
  36. {soup_cli-0.71.38 → soup_cli-0.71.39}/docker-compose.yml +0 -0
  37. {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/README.md +0 -0
  38. {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/adapters-and-governance.md +0 -0
  39. {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/backends-and-ops.md +0 -0
  40. {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/compliance.md +0 -0
  41. {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/data.md +0 -0
  42. {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/models.md +0 -0
  43. {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/peft-and-efficiency.md +0 -0
  44. {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/performance-and-quantization.md +0 -0
  45. {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/serving-and-export.md +0 -0
  46. {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/training.md +0 -0
  47. {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/README.md +0 -0
  48. {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/configs/dpo_chat.yaml +0 -0
  49. {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/configs/dpo_example.yaml +0 -0
  50. {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/configs/grpo_reasoning.yaml +0 -0
  51. {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/configs/rlhf_step1_sft.yaml +0 -0
  52. {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/configs/rlhf_step2_reward.yaml +0 -0
  53. {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/configs/rlhf_step3_ppo.yaml +0 -0
  54. {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/configs/sft_basic.yaml +0 -0
  55. {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/configs/vision_llama.yaml +0 -0
  56. {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/data/alpaca_tiny.jsonl +0 -0
  57. {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/data/chat_preferences.jsonl +0 -0
  58. {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/data/dpo_sample.jsonl +0 -0
  59. {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/data/reasoning_math.jsonl +0 -0
  60. {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/reward_hacking/rewards.py +0 -0
  61. {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/synthetic_workflow.md +0 -0
  62. {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/synthetic_workflow.yaml +0 -0
  63. {soup_cli-0.71.38 → soup_cli-0.71.39}/soup.png +0 -0
  64. {soup_cli-0.71.38 → soup_cli-0.71.39}/soup_logo_svg.svg +0 -0
  65. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/__main__.py +0 -0
  66. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/autopilot/__init__.py +0 -0
  67. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/autopilot/analyzer.py +0 -0
  68. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/autopilot/decisions.py +0 -0
  69. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/autopilot/generate_config.py +0 -0
  70. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cans/__init__.py +0 -0
  71. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cans/pack.py +0 -0
  72. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cans/publish.py +0 -0
  73. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cans/run.py +0 -0
  74. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cans/schema.py +0 -0
  75. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cans/unpack.py +0 -0
  76. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cans/verify.py +0 -0
  77. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cli.py +0 -0
  78. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cloud/__init__.py +0 -0
  79. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cloud/modal.py +0 -0
  80. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/__init__.py +0 -0
  81. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/_eval_v0550.py +0 -0
  82. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/_eval_v0610.py +0 -0
  83. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/_eval_v0650.py +0 -0
  84. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/_eval_v07110.py +0 -0
  85. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/_webhook_cli.py +0 -0
  86. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/ab.py +0 -0
  87. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/active_sample.py +0 -0
  88. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/adapters.py +0 -0
  89. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/advise.py +0 -0
  90. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/agent.py +0 -0
  91. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/airgap.py +0 -0
  92. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/apple_adapter.py +0 -0
  93. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/attest.py +0 -0
  94. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/audit_log.py +0 -0
  95. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/autopilot.py +0 -0
  96. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/bench.py +0 -0
  97. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/bom.py +0 -0
  98. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/build.py +0 -0
  99. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/can.py +0 -0
  100. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/card.py +0 -0
  101. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/chat.py +0 -0
  102. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/compile_cmd.py +0 -0
  103. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/compile_tools.py +0 -0
  104. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/completions.py +0 -0
  105. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/cost.py +0 -0
  106. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/data.py +0 -0
  107. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/data_canary.py +0 -0
  108. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/data_doctor.py +0 -0
  109. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/data_forge.py +0 -0
  110. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/data_mix.py +0 -0
  111. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/data_score.py +0 -0
  112. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/data_topics.py +0 -0
  113. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/delinearize_llama4.py +0 -0
  114. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/deploy.py +0 -0
  115. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/diagnose.py +0 -0
  116. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/diff.py +0 -0
  117. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/distill_prompt.py +0 -0
  118. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/doctor.py +0 -0
  119. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/draft.py +0 -0
  120. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/drift_alarm.py +0 -0
  121. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/edit.py +0 -0
  122. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/env.py +0 -0
  123. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/eval.py +0 -0
  124. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/expect.py +0 -0
  125. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/export.py +0 -0
  126. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/fetch.py +0 -0
  127. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/generate.py +0 -0
  128. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/history.py +0 -0
  129. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/infer.py +0 -0
  130. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/ingest.py +0 -0
  131. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/init.py +0 -0
  132. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/iterative_dpo.py +0 -0
  133. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/license_advisor.py +0 -0
  134. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/llama.py +0 -0
  135. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/local_rl.py +0 -0
  136. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/lock.py +0 -0
  137. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/loop.py +0 -0
  138. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/mcp.py +0 -0
  139. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/merge.py +0 -0
  140. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
  141. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/migrate.py +0 -0
  142. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/monitor.py +0 -0
  143. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/plan.py +0 -0
  144. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/plugins.py +0 -0
  145. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/probe.py +0 -0
  146. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/profile.py +0 -0
  147. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/prune_prompt.py +0 -0
  148. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/push.py +0 -0
  149. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/quantize.py +0 -0
  150. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/quickstart.py +0 -0
  151. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/ra_dit.py +0 -0
  152. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/recipes.py +0 -0
  153. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/registry.py +0 -0
  154. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/runs.py +0 -0
  155. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/serve.py +0 -0
  156. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/shrink.py +0 -0
  157. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/spectrum.py +0 -0
  158. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/steer.py +0 -0
  159. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/sweep.py +0 -0
  160. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/tokenizer.py +0 -0
  161. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/train.py +0 -0
  162. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/tui.py +0 -0
  163. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/tunability.py +0 -0
  164. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/ui.py +0 -0
  165. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/why.py +0 -0
  166. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/config/__init__.py +0 -0
  167. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/config/loader.py +0 -0
  168. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/__init__.py +0 -0
  169. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
  170. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
  171. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
  172. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
  173. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
  174. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
  175. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
  176. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
  177. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/gate/format_json.jsonl +0 -0
  178. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/gate/safety.jsonl +0 -0
  179. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/gate/tool_call.jsonl +0 -0
  180. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
  181. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
  182. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
  183. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
  184. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/augment.py +0 -0
  185. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/chat_templates.py +0 -0
  186. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/collators.py +0 -0
  187. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/formats.py +0 -0
  188. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/loader.py +0 -0
  189. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/loss_mask.py +0 -0
  190. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/providers/__init__.py +0 -0
  191. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/providers/_utils.py +0 -0
  192. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/providers/anthropic.py +0 -0
  193. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/providers/ollama.py +0 -0
  194. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/providers/vllm.py +0 -0
  195. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/sft_format.py +0 -0
  196. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/templates/__init__.py +0 -0
  197. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/templates/code.py +0 -0
  198. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/templates/conversation.py +0 -0
  199. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/templates/preference.py +0 -0
  200. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/templates/qa.py +0 -0
  201. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/templates/reasoning.py +0 -0
  202. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/templates/tool_calling.py +0 -0
  203. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/templates/verifiable.py +0 -0
  204. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/traces/__init__.py +0 -0
  205. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/traces/pair_builder.py +0 -0
  206. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/traces/parsers.py +0 -0
  207. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/traces/quality.py +0 -0
  208. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/validator.py +0 -0
  209. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/envs/__init__.py +0 -0
  210. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/envs/_common.py +0 -0
  211. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/envs/calculator.py +0 -0
  212. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/envs/guess_number.py +0 -0
  213. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/envs/retrieval_qa.py +0 -0
  214. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/__init__.py +0 -0
  215. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/arena.py +0 -0
  216. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
  217. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/calibrate.py +0 -0
  218. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
  219. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/custom.py +0 -0
  220. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/forgetting.py +0 -0
  221. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/gate.py +0 -0
  222. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/gate_suites.py +0 -0
  223. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/human.py +0 -0
  224. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/judge.py +0 -0
  225. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/leaderboard.py +0 -0
  226. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/quant_check.py +0 -0
  227. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/experiment/__init__.py +0 -0
  228. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/experiment/tracker.py +0 -0
  229. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/mcp_server/__init__.py +0 -0
  230. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/mcp_server/registry.py +0 -0
  231. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/mcp_server/server.py +0 -0
  232. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/migrate/__init__.py +0 -0
  233. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/migrate/axolotl.py +0 -0
  234. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/migrate/common.py +0 -0
  235. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/migrate/llamafactory.py +0 -0
  236. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/migrate/unsloth.py +0 -0
  237. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/monitoring/__init__.py +0 -0
  238. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/monitoring/callback.py +0 -0
  239. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
  240. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/monitoring/display.py +0 -0
  241. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
  242. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/monitoring/hf_push.py +0 -0
  243. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/monitoring/plugin_callback.py +0 -0
  244. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/monitoring/trace_logger.py +0 -0
  245. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/plugins/__init__.py +0 -0
  246. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/py.typed +0 -0
  247. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/recipes/__init__.py +0 -0
  248. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/recipes/catalog.py +0 -0
  249. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/registry/__init__.py +0 -0
  250. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/registry/attach.py +0 -0
  251. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/registry/diff.py +0 -0
  252. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/registry/hashing.py +0 -0
  253. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/registry/store.py +0 -0
  254. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/__init__.py +0 -0
  255. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/audio.yaml +0 -0
  256. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/bco.yaml +0 -0
  257. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/chat.yaml +0 -0
  258. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/code.yaml +0 -0
  259. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/embedding.yaml +0 -0
  260. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/eu-ai-act.yaml +0 -0
  261. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
  262. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
  263. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
  264. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/hipaa.yaml +0 -0
  265. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/ipo.yaml +0 -0
  266. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/kto.yaml +0 -0
  267. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/longcontext.yaml +0 -0
  268. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/manifest.json +0 -0
  269. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/medical.yaml +0 -0
  270. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/moe.yaml +0 -0
  271. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/orpo.yaml +0 -0
  272. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/pretrain.yaml +0 -0
  273. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/reasoning.yaml +0 -0
  274. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/rlhf.yaml +0 -0
  275. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/simpo.yaml +0 -0
  276. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/soc2.yaml +0 -0
  277. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/sr-11-7.yaml +0 -0
  278. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/tool-calling.yaml +0 -0
  279. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/vision.yaml +0 -0
  280. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/__init__.py +0 -0
  281. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/asr.py +0 -0
  282. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/bco.py +0 -0
  283. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/bitnet.py +0 -0
  284. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/classifier.py +0 -0
  285. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/distill.py +0 -0
  286. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/dpo.py +0 -0
  287. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/embedding.py +0 -0
  288. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/grpo.py +0 -0
  289. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/ipo.py +0 -0
  290. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/kto.py +0 -0
  291. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/mlx_dpo.py +0 -0
  292. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/mlx_grpo.py +0 -0
  293. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/mlx_routing.py +0 -0
  294. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/mlx_sft.py +0 -0
  295. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/mole_routing.py +0 -0
  296. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/online_dpo.py +0 -0
  297. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/orpo.py +0 -0
  298. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/ppo.py +0 -0
  299. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/preference.py +0 -0
  300. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/pretrain.py +0 -0
  301. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/prm.py +0 -0
  302. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/raft.py +0 -0
  303. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/reward_model.py +0 -0
  304. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/rewards.py +0 -0
  305. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/sft.py +0 -0
  306. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/simpo.py +0 -0
  307. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/tts.py +0 -0
  308. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/unlearn.py +0 -0
  309. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/tui_app.py +0 -0
  310. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/ui/__init__.py +0 -0
  311. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/ui/app.py +0 -0
  312. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/ui/plugins/__init__.py +0 -0
  313. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/ui/static/app.js +0 -0
  314. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/ui/static/index.html +0 -0
  315. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/ui/static/logo.png +0 -0
  316. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/ui/static/logo.svg +0 -0
  317. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/ui/static/style.css +0 -0
  318. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/__init__.py +0 -0
  319. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/_eval_text.py +0 -0
  320. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ab_test.py +0 -0
  321. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/activation_offload.py +0 -0
  322. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/active_sampler.py +0 -0
  323. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_arithmetic.py +0 -0
  324. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_bisect.py +0 -0
  325. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_branch.py +0 -0
  326. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_diff.py +0 -0
  327. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_fuse.py +0 -0
  328. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_merge.py +0 -0
  329. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_pr.py +0 -0
  330. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_scan.py +0 -0
  331. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_sign.py +0 -0
  332. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/advanced_precision.py +0 -0
  333. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/advise.py +0 -0
  334. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/advise_history.py +0 -0
  335. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/agent_forge.py +0 -0
  336. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/agent_rollout.py +0 -0
  337. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/agent_sandbox.py +0 -0
  338. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/airgap_bundle.py +0 -0
  339. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/annex_xi.py +0 -0
  340. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/anthropic_messages.py +0 -0
  341. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/apple_adapter.py +0 -0
  342. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/asr_metrics.py +0 -0
  343. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/attest.py +0 -0
  344. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/audit_log.py +0 -0
  345. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/auto_quant.py +0 -0
  346. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/backend_detect.py +0 -0
  347. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/batch_probe.py +0 -0
  348. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/behavior_battery.py +0 -0
  349. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/best_of_n.py +0 -0
  350. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/bitnet.py +0 -0
  351. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/blame.py +0 -0
  352. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/block_expansion.py +0 -0
  353. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/bom.py +0 -0
  354. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/brain_rot.py +0 -0
  355. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/brain_rot_lang.py +0 -0
  356. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/build_dag.py +0 -0
  357. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/canary.py +0 -0
  358. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/canary_discovery.py +0 -0
  359. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/canary_router.py +0 -0
  360. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/capability_suite.py +0 -0
  361. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/checklist_dsl.py +0 -0
  362. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
  363. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/citation_faithful.py +0 -0
  364. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/classifier.py +0 -0
  365. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/cmaes_merge.py +0 -0
  366. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/compile_tools.py +0 -0
  367. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/completions.py +0 -0
  368. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/constants.py +0 -0
  369. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/convergence.py +0 -0
  370. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/crash.py +0 -0
  371. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/cross_doc_attn.py +0 -0
  372. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/curriculum.py +0 -0
  373. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
  374. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/cut_ce.py +0 -0
  375. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/data_doctor.py +0 -0
  376. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/data_forge.py +0 -0
  377. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/data_lint.py +0 -0
  378. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/data_mix.py +0 -0
  379. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/data_pipeline.py +0 -0
  380. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/data_score.py +0 -0
  381. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/deepspeed.py +0 -0
  382. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/delinearize_llama4.py +0 -0
  383. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/demo_bundles.py +0 -0
  384. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/deploy_autopilot.py +0 -0
  385. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/deploy_measure.py +0 -0
  386. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/__init__.py +0 -0
  387. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/_common.py +0 -0
  388. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/badge.py +0 -0
  389. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/citation.py +0 -0
  390. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/contamination.py +0 -0
  391. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
  392. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/format.py +0 -0
  393. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/live.py +0 -0
  394. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/memorization.py +0 -0
  395. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
  396. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/refusal.py +0 -0
  397. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/report.py +0 -0
  398. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/runner.py +0 -0
  399. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/distill.py +0 -0
  400. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/dpo_variants.py +0 -0
  401. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/draft.py +0 -0
  402. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/drift_alarm.py +0 -0
  403. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ebft_gdpo.py +0 -0
  404. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/echo_trap.py +0 -0
  405. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/edit_diff.py +0 -0
  406. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/edit_governor.py +0 -0
  407. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/edit_kernels.py +0 -0
  408. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/embed.py +0 -0
  409. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/encoding.py +0 -0
  410. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/energy.py +0 -0
  411. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/env_lock.py +0 -0
  412. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/errors.py +0 -0
  413. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/eval_design.py +0 -0
  414. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/eval_gate_hook.py +0 -0
  415. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
  416. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/evolve.py +0 -0
  417. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/expectations.py +0 -0
  418. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/fetch_examples.py +0 -0
  419. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/flash_attn.py +0 -0
  420. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/fp8.py +0 -0
  421. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/freeze.py +0 -0
  422. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/fsdp.py +0 -0
  423. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
  424. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/galore.py +0 -0
  425. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/gguf_quant.py +0 -0
  426. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/gpu.py +0 -0
  427. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/gpu_monitor.py +0 -0
  428. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/grace_codebook.py +0 -0
  429. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/graceful_save.py +0 -0
  430. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/grad_accum.py +0 -0
  431. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/gradient_ckpt.py +0 -0
  432. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/grpo_long_context.py +0 -0
  433. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/grpo_variants.py +0 -0
  434. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/hardware_fit.py +0 -0
  435. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/harm_probe.py +0 -0
  436. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/hf.py +0 -0
  437. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/hf_space.py +0 -0
  438. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/hubs.py +0 -0
  439. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ingest_sources.py +0 -0
  440. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/integrations.py +0 -0
  441. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/interference.py +0 -0
  442. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/interference_live.py +0 -0
  443. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/irt.py +0 -0
  444. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/iterative_dpo.py +0 -0
  445. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/jinja_analyzer.py +0 -0
  446. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/kernel_picker.py +0 -0
  447. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/knowledge_edit.py +0 -0
  448. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/kv_cache.py +0 -0
  449. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/launcher.py +0 -0
  450. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/license_advisor.py +0 -0
  451. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/license_matrix.py +0 -0
  452. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/liger.py +0 -0
  453. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/lisa.py +0 -0
  454. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/live_eval.py +0 -0
  455. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/llama_proxy.py +0 -0
  456. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/llama_server_timings.py +0 -0
  457. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/local_rl.py +0 -0
  458. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
  459. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/loftq_init.py +0 -0
  460. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/log_level.py +0 -0
  461. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/long_context.py +0 -0
  462. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/longlora.py +0 -0
  463. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/loop_budget.py +0 -0
  464. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/loop_daemon.py +0 -0
  465. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/loop_iteration.py +0 -0
  466. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/loop_stages.py +0 -0
  467. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/loop_state.py +0 -0
  468. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/lr_finder.py +0 -0
  469. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/lr_groups.py +0 -0
  470. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/magpie.py +0 -0
  471. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/metrics.py +0 -0
  472. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/mii.py +0 -0
  473. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/minillm.py +0 -0
  474. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/mix_proxy.py +0 -0
  475. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/mixed_precision.py +0 -0
  476. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/mlx.py +0 -0
  477. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/mod.py +0 -0
  478. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/moe.py +0 -0
  479. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/moe_quant.py +0 -0
  480. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/mole_routing.py +0 -0
  481. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/multipack.py +0 -0
  482. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/multipack_sampler.py +0 -0
  483. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/multipack_trainer.py +0 -0
  484. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/namespace_pin.py +0 -0
  485. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/neat_packing.py +0 -0
  486. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ngram_spec.py +0 -0
  487. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/nlg_metrics.py +0 -0
  488. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ollama.py +0 -0
  489. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/onboarding.py +0 -0
  490. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/optimizer_zoo.py +0 -0
  491. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/paths.py +0 -0
  492. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/peft_builder.py +0 -0
  493. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/peft_patches.py +0 -0
  494. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/peft_wiring.py +0 -0
  495. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/persona_hub.py +0 -0
  496. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/pipeline.py +0 -0
  497. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/preference_combine.py +0 -0
  498. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/prm.py +0 -0
  499. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/prm_reward.py +0 -0
  500. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/probe_kernel.py +0 -0
  501. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/probe_pack.py +0 -0
  502. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/profiler.py +0 -0
  503. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/profiling.py +0 -0
  504. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/profiling_v0_43.py +0 -0
  505. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/prompt_compile.py +0 -0
  506. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/prompt_distill.py +0 -0
  507. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/prune_prompt.py +0 -0
  508. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/qat.py +0 -0
  509. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/qr_url.py +0 -0
  510. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/quality.py +0 -0
  511. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/quant_menu.py +0 -0
  512. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ra_dit.py +0 -0
  513. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ra_dit_run.py +0 -0
  514. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/raft.py +0 -0
  515. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/reasoning_effort.py +0 -0
  516. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/reasoning_parser.py +0 -0
  517. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/recipe_dag.py +0 -0
  518. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/recipe_run.py +0 -0
  519. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/registry.py +0 -0
  520. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/rehearsal.py +0 -0
  521. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/relora.py +0 -0
  522. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/replay.py +0 -0
  523. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/repro_receipt.py +0 -0
  524. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/reward_hack_control.py +0 -0
  525. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/reward_hacking.py +0 -0
  526. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ring_attention.py +0 -0
  527. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/rl_checkpoint.py +0 -0
  528. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
  529. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/run_cost.py +0 -0
  530. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/sae_diff.py +0 -0
  531. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/save_formats.py +0 -0
  532. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/semdedup.py +0 -0
  533. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/server_tools.py +0 -0
  534. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/sglang.py +0 -0
  535. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/shortcuts.py +0 -0
  536. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/shrink.py +0 -0
  537. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/signing.py +0 -0
  538. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/sleeper_probe.py +0 -0
  539. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/soup_lock.py +0 -0
  540. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/spec_pairing.py +0 -0
  541. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/spectrum_scan.py +0 -0
  542. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/spike_recovery.py +0 -0
  543. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/sse_train_stream.py +0 -0
  544. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/steering.py +0 -0
  545. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/strict_safetensors.py +0 -0
  546. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/structured_output.py +0 -0
  547. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/sweep_config.py +0 -0
  548. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/tail_latency.py +0 -0
  549. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/terraform_plan.py +0 -0
  550. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/tool_outputs.py +0 -0
  551. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/topics.py +0 -0
  552. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/topology.py +0 -0
  553. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/tracing.py +0 -0
  554. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/trackers.py +0 -0
  555. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/train_event_buffer.py +0 -0
  556. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/trainer_plugins.py +0 -0
  557. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/trust_remote.py +0 -0
  558. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/truth_probe.py +0 -0
  559. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/tts.py +0 -0
  560. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/tts_codec.py +0 -0
  561. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/tunability.py +0 -0
  562. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ui_env.py +0 -0
  563. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/uld.py +0 -0
  564. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/unlearn_kernels.py +0 -0
  565. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/unlearning.py +0 -0
  566. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/unlearning_eval.py +0 -0
  567. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/unsloth.py +0 -0
  568. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/v028_features.py +0 -0
  569. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/vector_bank.py +0 -0
  570. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/vllm.py +0 -0
  571. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/vscode_setup.py +0 -0
  572. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/warmup.py +0 -0
  573. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/webhooks.py +0 -0
  574. {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/why.py +0 -0
  575. {soup_cli-0.71.38 → soup_cli-0.71.39}/templates/chat.yaml +0 -0
  576. {soup_cli-0.71.38 → soup_cli-0.71.39}/templates/code.yaml +0 -0
  577. {soup_cli-0.71.38 → soup_cli-0.71.39}/templates/medical.yaml +0 -0
  578. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/__init__.py +0 -0
  579. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/conftest.py +0 -0
  580. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/qa/v053_qa.md +0 -0
  581. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/qa/v07114_qa.md +0 -0
  582. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/qa/v0716_qa.md +0 -0
  583. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_adapters.py +0 -0
  584. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_advanced_peft.py +0 -0
  585. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_assistant_mask.py +0 -0
  586. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_audio.py +0 -0
  587. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_auto_tuning.py +0 -0
  588. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_autopilot.py +0 -0
  589. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_awq_gptq_export.py +0 -0
  590. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_batch_probe.py +0 -0
  591. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_bco.py +0 -0
  592. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_bench.py +0 -0
  593. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_brain_rot_multilingual.py +0 -0
  594. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_bugfixes.py +0 -0
  595. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_build_dag.py +0 -0
  596. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_callback.py +0 -0
  597. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_cans.py +0 -0
  598. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_chat.py +0 -0
  599. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_chat_template.py +0 -0
  600. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_cli.py +0 -0
  601. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_cli_subprocess.py +0 -0
  602. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_code_review_critical.py +0 -0
  603. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_code_review_deferred.py +0 -0
  604. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_code_review_high.py +0 -0
  605. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_code_review_medium_low.py +0 -0
  606. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_code_review_recurring.py +0 -0
  607. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_config.py +0 -0
  608. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_cost.py +0 -0
  609. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_crash_reporter.py +0 -0
  610. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_curriculum.py +0 -0
  611. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_data.py +0 -0
  612. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_data_augment.py +0 -0
  613. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_data_sample.py +0 -0
  614. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_data_split.py +0 -0
  615. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_data_tools.py +0 -0
  616. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_dataset_hub.py +0 -0
  617. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_dataset_registry.py +0 -0
  618. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_deepspeed.py +0 -0
  619. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_deploy_ollama.py +0 -0
  620. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_diff.py +0 -0
  621. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_display.py +0 -0
  622. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_doctor.py +0 -0
  623. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_dpo_example.py +0 -0
  624. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_dpo_variants.py +0 -0
  625. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_embedding.py +0 -0
  626. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_errors.py +0 -0
  627. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_eval.py +0 -0
  628. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_eval_gate.py +0 -0
  629. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_eval_platform.py +0 -0
  630. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_export.py +0 -0
  631. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_formats.py +0 -0
  632. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_fp8_recipe.py +0 -0
  633. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_freeze_training.py +0 -0
  634. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_generate.py +0 -0
  635. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_gpu.py +0 -0
  636. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_grpo.py +0 -0
  637. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_hf_integration.py +0 -0
  638. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_infer.py +0 -0
  639. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_inference_advanced.py +0 -0
  640. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_init.py +0 -0
  641. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_ipo.py +0 -0
  642. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_jinja_analyzer.py +0 -0
  643. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_kto.py +0 -0
  644. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_loader.py +0 -0
  645. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_log_level.py +0 -0
  646. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_loss_watchdog.py +0 -0
  647. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_merge.py +0 -0
  648. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_migrate.py +0 -0
  649. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_mlx_backend.py +0 -0
  650. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_moe.py +0 -0
  651. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_multi_adapter.py +0 -0
  652. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_multi_gpu.py +0 -0
  653. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_multipack_config.py +0 -0
  654. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_multipack_invariants.py +0 -0
  655. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_multipack_sampler.py +0 -0
  656. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_neat_packing.py +0 -0
  657. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_neftune_rslora.py +0 -0
  658. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_onnx_tensorrt_export.py +0 -0
  659. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_orpo.py +0 -0
  660. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_packing.py +0 -0
  661. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_part_a_wave1.py +0 -0
  662. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_part_a_wave2.py +0 -0
  663. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_part_b.py +0 -0
  664. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_part_c.py +0 -0
  665. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_part_d.py +0 -0
  666. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_part_e.py +0 -0
  667. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_part_f_hardening.py +0 -0
  668. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_peft_methods.py +0 -0
  669. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_peft_patches.py +0 -0
  670. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_performance.py +0 -0
  671. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_pissa_init.py +0 -0
  672. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_ppo.py +0 -0
  673. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_preference_dispatcher.py +0 -0
  674. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_preference_multi.py +0 -0
  675. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_preference_multi_runtime.py +0 -0
  676. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_pretrain.py +0 -0
  677. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_profile.py +0 -0
  678. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_profiling.py +0 -0
  679. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_progress.py +0 -0
  680. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_push.py +0 -0
  681. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_qat.py +0 -0
  682. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_quality_filter.py +0 -0
  683. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_quant_check.py +0 -0
  684. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_quant_menu.py +0 -0
  685. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_quickstart.py +0 -0
  686. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_rank_pattern.py +0 -0
  687. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_recipes.py +0 -0
  688. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_recipes_v031.py +0 -0
  689. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_refusal_multilingual.py +0 -0
  690. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_registry.py +0 -0
  691. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_relora.py +0 -0
  692. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_replay.py +0 -0
  693. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_resume.py +0 -0
  694. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_review_fixes_v07133.py +0 -0
  695. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_rlvr.py +0 -0
  696. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_run_cost.py +0 -0
  697. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_runs.py +0 -0
  698. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_serve.py +0 -0
  699. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_server_generate.py +0 -0
  700. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_sglang_serve.py +0 -0
  701. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_simpo.py +0 -0
  702. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_smoke_train.py +0 -0
  703. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_speculative_decoding.py +0 -0
  704. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_sweep.py +0 -0
  705. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_synth_data_pro.py +0 -0
  706. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_templates_yaml.py +0 -0
  707. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_tensorboard.py +0 -0
  708. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_tool_calling.py +0 -0
  709. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_trace_to_pref.py +0 -0
  710. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_tracker.py +0 -0
  711. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_trainer_coverage_v035.py +0 -0
  712. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_trainer_init.py +0 -0
  713. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_training_intelligence.py +0 -0
  714. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_training_speed.py +0 -0
  715. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_trust_remote_code.py +0 -0
  716. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_tui.py +0 -0
  717. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_ui.py +0 -0
  718. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_ui_chat.py +0 -0
  719. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_ui_config_builder.py +0 -0
  720. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_ui_live_monitor.py +0 -0
  721. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_ui_metrics.py +0 -0
  722. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_unsloth.py +0 -0
  723. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0401_part_c.py +0 -0
  724. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0401_part_d.py +0 -0
  725. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0401_part_e.py +0 -0
  726. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0402_part_a.py +0 -0
  727. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0402_part_b.py +0 -0
  728. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0403_part_a.py +0 -0
  729. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0403_part_b.py +0 -0
  730. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0403_part_c.py +0 -0
  731. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0404_part_a.py +0 -0
  732. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0404_part_b.py +0 -0
  733. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0405_part_a.py +0 -0
  734. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0406_part_a.py +0 -0
  735. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0410_part_a.py +0 -0
  736. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0410_part_b.py +0 -0
  737. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0410_part_c.py +0 -0
  738. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0420.py +0 -0
  739. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0430_part_a.py +0 -0
  740. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0430_part_b.py +0 -0
  741. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0430_part_c.py +0 -0
  742. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0430_part_d.py +0 -0
  743. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0440_part_a.py +0 -0
  744. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0440_part_b.py +0 -0
  745. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0440_part_c.py +0 -0
  746. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0440_part_d.py +0 -0
  747. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0440_review_followups.py +0 -0
  748. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0450.py +0 -0
  749. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0460_part_a.py +0 -0
  750. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0460_part_b.py +0 -0
  751. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0470_part_a.py +0 -0
  752. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0470_part_b.py +0 -0
  753. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0480_part_a.py +0 -0
  754. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0480_part_b.py +0 -0
  755. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0490.py +0 -0
  756. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0500_part_a.py +0 -0
  757. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0500_part_b.py +0 -0
  758. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0500_part_c.py +0 -0
  759. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0500_part_d.py +0 -0
  760. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0500_part_e.py +0 -0
  761. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0510.py +0 -0
  762. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0520.py +0 -0
  763. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0530.py +0 -0
  764. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v05310.py +0 -0
  765. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v05311.py +0 -0
  766. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0531_109.py +0 -0
  767. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0531_139.py +0 -0
  768. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0531_142.py +0 -0
  769. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0531_82.py +0 -0
  770. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0532.py +0 -0
  771. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0533.py +0 -0
  772. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0534.py +0 -0
  773. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0535.py +0 -0
  774. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0536.py +0 -0
  775. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0537.py +0 -0
  776. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0538.py +0 -0
  777. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0539.py +0 -0
  778. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0540.py +0 -0
  779. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0550.py +0 -0
  780. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0550_followups.py +0 -0
  781. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0560.py +0 -0
  782. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0570_part_a.py +0 -0
  783. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0570_part_b.py +0 -0
  784. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0570_part_c.py +0 -0
  785. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0570_part_d.py +0 -0
  786. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0580.py +0 -0
  787. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0590.py +0 -0
  788. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0600_part_a.py +0 -0
  789. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0600_part_b.py +0 -0
  790. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0600_part_c.py +0 -0
  791. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0600_part_d.py +0 -0
  792. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0600_part_e.py +0 -0
  793. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0600_part_f.py +0 -0
  794. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0610_part_a.py +0 -0
  795. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0610_part_b.py +0 -0
  796. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0610_part_c.py +0 -0
  797. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0610_part_d.py +0 -0
  798. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0610_part_e.py +0 -0
  799. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0620_followups.py +0 -0
  800. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0620_part_a.py +0 -0
  801. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0620_part_b.py +0 -0
  802. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0620_part_c.py +0 -0
  803. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0620_part_d.py +0 -0
  804. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0620_part_e.py +0 -0
  805. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0630_followups.py +0 -0
  806. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0630_part_a.py +0 -0
  807. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0630_part_b.py +0 -0
  808. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0630_part_c.py +0 -0
  809. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0630_part_d.py +0 -0
  810. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0630_part_e.py +0 -0
  811. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0631_206.py +0 -0
  812. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0640_followups.py +0 -0
  813. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0640_part_a.py +0 -0
  814. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0640_part_b.py +0 -0
  815. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0640_part_c.py +0 -0
  816. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0640_part_d.py +0 -0
  817. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0640_part_e.py +0 -0
  818. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0640_part_f.py +0 -0
  819. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0650_followups.py +0 -0
  820. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0650_part_a.py +0 -0
  821. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0650_part_b.py +0 -0
  822. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0650_part_c.py +0 -0
  823. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0650_part_d.py +0 -0
  824. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0650_part_e.py +0 -0
  825. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0660_cli.py +0 -0
  826. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0660_followups.py +0 -0
  827. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0660_part_a.py +0 -0
  828. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0660_part_b.py +0 -0
  829. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0660_part_c.py +0 -0
  830. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0660_part_d.py +0 -0
  831. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0660_part_e.py +0 -0
  832. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0670_followups.py +0 -0
  833. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0670_part_a.py +0 -0
  834. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0670_part_b.py +0 -0
  835. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0670_part_c.py +0 -0
  836. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0670_part_d.py +0 -0
  837. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0670_part_e.py +0 -0
  838. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0670_part_f.py +0 -0
  839. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0680_followups.py +0 -0
  840. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0680_part_a.py +0 -0
  841. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0680_part_b.py +0 -0
  842. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0680_part_c.py +0 -0
  843. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0680_part_d.py +0 -0
  844. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0680_part_e.py +0 -0
  845. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0690_part_a.py +0 -0
  846. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0690_part_b.py +0 -0
  847. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0690_part_c.py +0 -0
  848. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0690_part_d.py +0 -0
  849. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0690_part_e.py +0 -0
  850. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0700_part_a.py +0 -0
  851. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0700_part_b.py +0 -0
  852. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0700_part_c.py +0 -0
  853. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0700_part_d.py +0 -0
  854. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0700_part_e.py +0 -0
  855. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0700_part_f.py +0 -0
  856. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07110.py +0 -0
  857. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07111.py +0 -0
  858. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07112.py +0 -0
  859. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07113.py +0 -0
  860. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07114.py +0 -0
  861. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07115.py +0 -0
  862. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07116.py +0 -0
  863. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07117.py +0 -0
  864. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07118.py +0 -0
  865. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07119.py +0 -0
  866. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0712.py +0 -0
  867. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07120.py +0 -0
  868. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07121.py +0 -0
  869. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07122.py +0 -0
  870. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07123.py +0 -0
  871. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07124.py +0 -0
  872. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07125.py +0 -0
  873. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07126.py +0 -0
  874. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07127.py +0 -0
  875. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07128.py +0 -0
  876. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07129.py +0 -0
  877. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0713.py +0 -0
  878. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07130.py +0 -0
  879. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07131.py +0 -0
  880. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07132.py +0 -0
  881. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07133.py +0 -0
  882. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07134.py +0 -0
  883. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07135.py +0 -0
  884. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07136.py +0 -0
  885. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07137.py +0 -0
  886. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07138.py +0 -0
  887. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0714.py +0 -0
  888. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0715.py +0 -0
  889. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0716.py +0 -0
  890. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0717.py +0 -0
  891. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0718.py +0 -0
  892. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0719.py +0 -0
  893. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_validator.py +0 -0
  894. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_vision.py +0 -0
  895. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_vllm_serve.py +0 -0
  896. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_warmup.py +0 -0
  897. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_why.py +0 -0
  898. {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_windows_encoding.py +0 -0
@@ -12,6 +12,53 @@ reproducing 70+ versions of notes.
12
12
 
13
13
  ## [Unreleased]
14
14
 
15
+ ## [0.71.39] - 2026-07-19
16
+
17
+ **"CI for weights, not prompts": close the evidence loop.** `soup ship`'s verdict is
18
+ now something Soup can emit, commit, review, and bind to the exact model that
19
+ produced it — turning the `soup ci init` gate from "edit two numbers in a JSON file"
20
+ into a reproducible, provenance-bound check that renders on every PR.
21
+
22
+ ### Added
23
+
24
+ - **`soup ship --emit-evidence <path>`** — re-serialises the verdict into the
25
+ `--evidence` INPUT schema, so a run's output is replayable as input: feeding it
26
+ back through `--evidence` (same `--forgetting-threshold`) reproduces an identical
27
+ verdict. Output is finally input.
28
+ - **`ShipConfig` under `eval.ship` in `soup.yaml` + `soup ship --config soup.yaml`** —
29
+ commit the gate policy (`task_eval` / `task_mode` / `general_suite` /
30
+ `forgetting_threshold` / `judge_model` / `baseline`) so the verdict is reviewable in
31
+ a PR diff and reproducible. An explicit CLI flag always wins (CLI > config > default).
32
+ - **`soup ship --push owner/repo#N`** — post the verdict as a GitHub PR comment
33
+ (reuses the `soup adapters pr --push` `gh api` plumbing). Best-effort: a missing
34
+ token / `gh` failure warns but never flips the SHIP / DON'T-SHIP exit code.
35
+ - **Evidence provenance + staleness gate.** With `--emit-evidence`, `--config` STAMPS
36
+ a `provenance` block (`config_sha` — a semantic, order-insensitive recipe hash — plus
37
+ `base_model` and a best-effort `data_sha`) onto the evidence. With `--evidence`
38
+ alone, `--config` GATES: it refuses (exit 3) evidence whose `config_sha` drifted
39
+ from the committed config, so a PR that changed `soup.yaml` but forgot to recompute
40
+ its evidence is caught. The gate policy (`eval.ship`) is EXCLUDED from the hash, so
41
+ tuning `forgetting_threshold` never falsely invalidates evidence about an unchanged
42
+ model.
43
+ - **`soup ci init --config <soup.yaml>`** — binds the generated gate's `soup ship`
44
+ step to the committed config (provenance/staleness enforcement in CI).
45
+
46
+ ### Changed
47
+
48
+ - **Exit-code note:** `soup ship --config` usage / staleness errors are exit `3`
49
+ (usage), preserving `0 = SHIP`, `2 = DON'T SHIP`, `1 = runtime` from v0.71.38.
50
+
51
+ ### Security
52
+
53
+ - `provenance.config_sha` read from untrusted evidence is shape-validated as a hex
54
+ digest before being echoed (a raw value could smuggle terminal ESC bytes past
55
+ `rich.markup.escape`).
56
+ - `provenance.data_sha` hashes the training file through an `O_NOFOLLOW` fd with a
57
+ symlink-rejecting containment check and an 8 GiB cap (was an unguarded `hash_file`).
58
+ - `soup ci init`'s path validation now rejects `#` and the YAML 1.1 line breaks
59
+ (NEL / LS / PS), closing a plain-scalar comment-truncation of the generated `run:`
60
+ step (also hardens the pre-existing `--data` / `--suite` / `--evidence` args).
61
+
15
62
  ## [0.71.38] - 2026-07-17
16
63
 
17
64
  **`soup ship`'s regression leg now has teeth.** Leg 2 (the catastrophic-forgetting
@@ -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 (316 files, 16330 tests)
123
+ tests/ - Test suite (317 files, 16387 tests)
124
124
  examples/ - Real-world config examples and datasets
125
125
  ```
126
126
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: soup-cli
3
- Version: 0.71.38
3
+ Version: 0.71.39
4
4
  Summary: Fine-tune and post-train LLMs in one command. No SSH, no config hell.
5
5
  Project-URL: Homepage, https://github.com/MakazhanAlpamys/Soup
6
6
  Project-URL: Repository, https://github.com/MakazhanAlpamys/Soup
@@ -193,41 +193,39 @@ infrastructure instead of improving models. Soup fixes that.
193
193
 
194
194
  ## What's New
195
195
 
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 hasno 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`.
196
+ **v0.71.39CI for weights, not prompts.** `soup ship`'s verdict is now something Soup can emit, commit, review, and bind to the exact model that produced it so a fine-tuning gate renders on every PR instead of asking you to hand-edit a JSON file.
197
+
198
+ - **Output is finally input.** `soup ship --emit-evidence ev.json` writes the scores in the
199
+ `--evidence` schema, so a run replays offline into an identical verdict the round-trip the
200
+ old `--output` couldn't do.
201
+ - **Commit the gate policy.** Put `eval.ship` in your `soup.yaml` (`forgetting_threshold`,
202
+ `general_suite`, `task_mode`, ) and `soup ship --config soup.yaml` reads it the gate is now
203
+ reviewable in a PR diff. Explicit flags still win.
204
+ - **Provenance-bound evidence.** `--config --emit-evidence` STAMPS a `config_sha` onto the
205
+ evidence; `--config --evidence` GATES on it a PR that changed the recipe but forgot to
206
+ recompute its evidence is refused (exit 3). Tuning the threshold never falsely invalidates it.
207
+ - **The verdict on your PR.** `soup ship --push owner/repo#N` posts the SHIP / DON'T-SHIP card as
208
+ a GitHub comment; `soup ci init --config soup.yaml` wires the whole thing into CI.
211
209
 
212
210
  ```bash
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
211
+ # producer (train job): stamp the scores with the config that produced them
212
+ soup ship --evidence scores.json --config soup.yaml --emit-evidence ship_evidence.json
216
213
 
217
- soup ship --evidence scores.json # offline verdict from pre-computed scores
214
+ # gate (PR CI): refuse evidence that doesn't match the committed config
215
+ soup ship --evidence ship_evidence.json --config soup.yaml --push owner/repo#42
216
+ soup ci init --config soup.yaml # writes .github/workflows/soup-gate.yml
218
217
  ```
219
218
 
220
219
  <details>
221
- <summary>Previous release — v0.71.36, Data Moat II (semantic dedup · topics · canaries · replay)</summary>
220
+ <summary>Previous release — v0.71.38, The gate grows teeth (real leg-2 regression gate)</summary>
222
221
 
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.
222
+ `soup ship`'s regression leg became real: a fixed, extraction-based scorer over seven bundled,
223
+ offline suites (MCQ · arithmetic · tool-calling · JSON validity · safety/refusal). A tune that
224
+ wins your task but quietly breaks tool-calling now gets a **DON'T SHIP**. Zero new deps.
226
225
 
227
226
  ```bash
228
- soup data topics train.jsonl
229
- soup data canary check --manifest secrets.json --base ./my-model # exit 2 = leak
230
- soup train --config sft.yaml --replay old_task.jsonl --replay-ratio 0.1
227
+ soup ship --base ./base --adapter ./my-lora --task-eval my_task.jsonl
228
+ # exit 0 = SHIP · 2 = DON'T SHIP · 3 = bad flags · 1 = runtime error
231
229
  ```
232
230
 
233
231
  </details>
@@ -49,41 +49,39 @@ infrastructure instead of improving models. Soup fixes that.
49
49
 
50
50
  ## What's New
51
51
 
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 hasno 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`.
52
+ **v0.71.39CI for weights, not prompts.** `soup ship`'s verdict is now something Soup can emit, commit, review, and bind to the exact model that produced it so a fine-tuning gate renders on every PR instead of asking you to hand-edit a JSON file.
53
+
54
+ - **Output is finally input.** `soup ship --emit-evidence ev.json` writes the scores in the
55
+ `--evidence` schema, so a run replays offline into an identical verdict the round-trip the
56
+ old `--output` couldn't do.
57
+ - **Commit the gate policy.** Put `eval.ship` in your `soup.yaml` (`forgetting_threshold`,
58
+ `general_suite`, `task_mode`, ) and `soup ship --config soup.yaml` reads it the gate is now
59
+ reviewable in a PR diff. Explicit flags still win.
60
+ - **Provenance-bound evidence.** `--config --emit-evidence` STAMPS a `config_sha` onto the
61
+ evidence; `--config --evidence` GATES on it a PR that changed the recipe but forgot to
62
+ recompute its evidence is refused (exit 3). Tuning the threshold never falsely invalidates it.
63
+ - **The verdict on your PR.** `soup ship --push owner/repo#N` posts the SHIP / DON'T-SHIP card as
64
+ a GitHub comment; `soup ci init --config soup.yaml` wires the whole thing into CI.
67
65
 
68
66
  ```bash
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
67
+ # producer (train job): stamp the scores with the config that produced them
68
+ soup ship --evidence scores.json --config soup.yaml --emit-evidence ship_evidence.json
72
69
 
73
- soup ship --evidence scores.json # offline verdict from pre-computed scores
70
+ # gate (PR CI): refuse evidence that doesn't match the committed config
71
+ soup ship --evidence ship_evidence.json --config soup.yaml --push owner/repo#42
72
+ soup ci init --config soup.yaml # writes .github/workflows/soup-gate.yml
74
73
  ```
75
74
 
76
75
  <details>
77
- <summary>Previous release — v0.71.36, Data Moat II (semantic dedup · topics · canaries · replay)</summary>
76
+ <summary>Previous release — v0.71.38, The gate grows teeth (real leg-2 regression gate)</summary>
78
77
 
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.
78
+ `soup ship`'s regression leg became real: a fixed, extraction-based scorer over seven bundled,
79
+ offline suites (MCQ · arithmetic · tool-calling · JSON validity · safety/refusal). A tune that
80
+ wins your task but quietly breaks tool-calling now gets a **DON'T SHIP**. Zero new deps.
82
81
 
83
82
  ```bash
84
- soup data topics train.jsonl
85
- soup data canary check --manifest secrets.json --base ./my-model # exit 2 = leak
86
- soup train --config sft.yaml --replay old_task.jsonl --replay-ratio 0.1
83
+ soup ship --base ./base --adapter ./my-lora --task-eval my_task.jsonl
84
+ # exit 0 = SHIP · 2 = DON'T SHIP · 3 = bad flags · 1 = runtime error
87
85
  ```
88
86
 
89
87
  </details>
@@ -166,9 +166,12 @@ soup ship ... --task-mode judge_score --judge-model ollama://llama3.1 Leg-1 via
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
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
168
  soup ship ... --general-suite mmlu,gsm8k --baseline base.json lm-eval leg-2 override + recorded base scores
169
+ soup ship ... --emit-evidence ev.json Re-serialise the scores as replayable --evidence input (output-is-input, #312) (v0.71.39)
170
+ soup ship ... --config soup.yaml Read eval.ship gate defaults; --evidence GATES on provenance, --emit-evidence STAMPS it (v0.71.39)
171
+ soup ship ... --push owner/repo#N Post the verdict as a GitHub PR comment (best-effort; never flips the exit code) (v0.71.39)
169
172
  soup card <registry-id> -o MODELCARD.md HF model card from a registry entry: training config, evals, hashes, lineage, artifacts (v0.71.35)
170
173
  soup push --model ./out --repo you/m --card <registry-id> Upload that registry-driven card as the README (HF only) (v0.71.35)
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)
174
+ soup ci init [--data d.jsonl --suite s.yaml --evidence ev.json] [--config soup.yaml] [--branch main --python 3.11] [--force] Write .github/workflows/soup-gate.yml: data validate -> expect -> ship gate on every PR (v0.71.35); --config binds the gate to a committed config so it refuses stale evidence (v0.71.39)
172
175
  soup mcp serve MCP server over stdio (drive Soup from Claude Code / Cursor / Cline; requires [mcp] extra) (v0.71.28)
173
176
  soup mcp serve --allow-mutating Also expose plan-only train_start / export tools (never execute) (v0.71.28)
174
177
  soup shrink --model <id|path> --drop-ratio 0.25 --calib c.jsonl -o shrunk Depth-prune least-important layer block + SHIP/DON'T-SHIP ppl verdict (exit 0/2/1) (v0.71.29)
@@ -378,6 +378,36 @@ Exit codes (v0.71.38): **0 = SHIP · 2 = DON'T SHIP · 3 = usage/flag error · 1
378
378
  lives in `soup_cli.utils.ship_verdict` (`decide_ship` is a pure function — the whole truth table
379
379
  is CPU-testable); the bundled suites live in `soup_cli.eval.gate_suites`.
380
380
 
381
+ ### Closing the evidence loop (v0.71.39)
382
+
383
+ The verdict is now emittable, committable, and provenance-bound so a fine-tuning gate runs on
384
+ every PR instead of relying on a hand-edited JSON file.
385
+
386
+ - **`--emit-evidence <path>`** re-serialises the scores into the `--evidence` INPUT schema, so a
387
+ run's output is replayable as input — feeding it back through `--evidence` (same threshold)
388
+ reproduces an identical verdict.
389
+ - **`--config soup.yaml`** reads a committed `eval.ship` block for the gate defaults
390
+ (`task_eval` / `task_mode` / `general_suite` / `forgetting_threshold` / `judge_model` /
391
+ `baseline`); an explicit CLI flag always wins. This makes the gate reviewable in a PR diff.
392
+ - **Provenance + staleness.** With `--emit-evidence`, `--config` STAMPS a `provenance` block
393
+ (`config_sha` — a semantic, order-insensitive recipe hash that EXCLUDES the `eval.ship` gate
394
+ policy, so tuning the threshold never invalidates evidence — plus `base_model` and a
395
+ best-effort `data_sha`). With `--evidence` alone, `--config` GATES: it refuses (exit 3)
396
+ evidence whose `config_sha` drifted from the committed config.
397
+ - **`--push owner/repo#N`** posts the verdict as a GitHub PR comment (best-effort — a missing
398
+ token or `gh` failure warns but never flips the SHIP / DON'T-SHIP exit code).
399
+
400
+ ```bash
401
+ # Producer (train job): compute or stamp scores, bound to the committed recipe
402
+ soup ship --evidence scores.json --config soup.yaml --emit-evidence ship_evidence.json
403
+
404
+ # Gate (PR CI): refuse evidence that doesn't match the committed config, comment the verdict
405
+ soup ship --evidence ship_evidence.json --config soup.yaml --push owner/repo#42
406
+ ```
407
+
408
+ `soup ci init --config soup.yaml` binds the generated workflow's ship step to the committed
409
+ config, so the whole loop runs in CI (see [commands.md](commands.md)).
410
+
381
411
 
382
412
  ## NLG Evaluation Metrics (BLEU + ROUGE)
383
413
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "soup-cli"
7
- version = "0.71.38"
7
+ version = "0.71.39"
8
8
  description = "Fine-tune and post-train LLMs in one command. No SSH, no config hell."
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
@@ -1,3 +1,3 @@
1
1
  """Soup CLI — Fine-tune and post-train LLMs in one command."""
2
2
 
3
- __version__ = "0.71.38"
3
+ __version__ = "0.71.39"
@@ -6,6 +6,8 @@
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
+ from typing import Optional
10
+
9
11
  import typer
10
12
  from rich.console import Console
11
13
  from rich.markup import escape
@@ -33,6 +35,10 @@ def init(
33
35
  "3.11", "--python", help="Python version for the CI runner (e.g. 3.11)"
34
36
  ),
35
37
  branch: str = typer.Option("main", "--branch", help="Branch the workflow triggers on"),
38
+ config: Optional[str] = typer.Option(
39
+ None, "--config",
40
+ help="Bind the ship gate to a committed soup.yaml (refuses stale evidence)",
41
+ ),
36
42
  output: str = typer.Option(
37
43
  ".github/workflows/soup-gate.yml", "-o", "--output", help="Workflow output path"
38
44
  ),
@@ -48,6 +54,7 @@ def init(
48
54
  branch=branch,
49
55
  output_path=output,
50
56
  overwrite=force,
57
+ config_path=config,
51
58
  )
52
59
  except (ValueError, TypeError, OSError) as exc:
53
60
  console.print(f"[red]{escape(str(exc))}[/]")