soup-cli 0.71.35__tar.gz → 0.71.36__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 (891) hide show
  1. {soup_cli-0.71.35 → soup_cli-0.71.36}/CHANGELOG.md +65 -0
  2. {soup_cli-0.71.35 → soup_cli-0.71.36}/CONTRIBUTING.md +3 -3
  3. {soup_cli-0.71.35 → soup_cli-0.71.36}/PKG-INFO +29 -26
  4. {soup_cli-0.71.35 → soup_cli-0.71.36}/README.md +28 -25
  5. {soup_cli-0.71.35 → soup_cli-0.71.36}/docs/commands.md +5 -0
  6. {soup_cli-0.71.35 → soup_cli-0.71.36}/docs/data.md +122 -0
  7. {soup_cli-0.71.35 → soup_cli-0.71.36}/docs/peft-and-efficiency.md +1 -1
  8. {soup_cli-0.71.35 → soup_cli-0.71.36}/docs/serving-and-export.md +29 -0
  9. {soup_cli-0.71.35 → soup_cli-0.71.36}/docs/training.md +54 -0
  10. {soup_cli-0.71.35 → soup_cli-0.71.36}/pyproject.toml +1 -1
  11. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/__init__.py +1 -1
  12. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/cli.py +9 -0
  13. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/data.py +107 -16
  14. soup_cli-0.71.36/src/soup_cli/commands/data_canary.py +254 -0
  15. soup_cli-0.71.36/src/soup_cli/commands/data_topics.py +154 -0
  16. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/eval.py +1 -1
  17. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/export.py +4 -4
  18. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/generate.py +1 -1
  19. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +1 -1
  20. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/serve.py +3 -3
  21. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/train.py +60 -4
  22. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/tui.py +1 -1
  23. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/ui.py +1 -1
  24. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/config/schema.py +103 -0
  25. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/loader.py +107 -23
  26. soup_cli-0.71.36/src/soup_cli/utils/canary.py +349 -0
  27. soup_cli-0.71.36/src/soup_cli/utils/embed.py +231 -0
  28. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/gpu.py +70 -1
  29. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/live_eval.py +39 -10
  30. soup_cli-0.71.36/src/soup_cli/utils/rehearsal.py +122 -0
  31. soup_cli-0.71.36/src/soup_cli/utils/semdedup.py +105 -0
  32. soup_cli-0.71.36/src/soup_cli/utils/topics.py +240 -0
  33. soup_cli-0.71.36/tests/test_v07136.py +3013 -0
  34. {soup_cli-0.71.35 → soup_cli-0.71.36}/.dockerignore +0 -0
  35. {soup_cli-0.71.35 → soup_cli-0.71.36}/.github/FUNDING.yml +0 -0
  36. {soup_cli-0.71.35 → soup_cli-0.71.36}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  37. {soup_cli-0.71.35 → soup_cli-0.71.36}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  38. {soup_cli-0.71.35 → soup_cli-0.71.36}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  39. {soup_cli-0.71.35 → soup_cli-0.71.36}/.github/pull_request_template.md +0 -0
  40. {soup_cli-0.71.35 → soup_cli-0.71.36}/.github/workflows/ci.yml +0 -0
  41. {soup_cli-0.71.35 → soup_cli-0.71.36}/.github/workflows/docker.yml +0 -0
  42. {soup_cli-0.71.35 → soup_cli-0.71.36}/.github/workflows/publish.yml +0 -0
  43. {soup_cli-0.71.35 → soup_cli-0.71.36}/.github/workflows/recipe-validation.yml +0 -0
  44. {soup_cli-0.71.35 → soup_cli-0.71.36}/.gitignore +0 -0
  45. {soup_cli-0.71.35 → soup_cli-0.71.36}/.mailmap +0 -0
  46. {soup_cli-0.71.35 → soup_cli-0.71.36}/.pre-commit-config.yaml +0 -0
  47. {soup_cli-0.71.35 → soup_cli-0.71.36}/AGENTS.md +0 -0
  48. {soup_cli-0.71.35 → soup_cli-0.71.36}/CODEOWNERS +0 -0
  49. {soup_cli-0.71.35 → soup_cli-0.71.36}/CODE_OF_CONDUCT.md +0 -0
  50. {soup_cli-0.71.35 → soup_cli-0.71.36}/CONTRIBUTORS.md +0 -0
  51. {soup_cli-0.71.35 → soup_cli-0.71.36}/Dockerfile +0 -0
  52. {soup_cli-0.71.35 → soup_cli-0.71.36}/LICENSE +0 -0
  53. {soup_cli-0.71.35 → soup_cli-0.71.36}/NOTICE +0 -0
  54. {soup_cli-0.71.35 → soup_cli-0.71.36}/SECURITY.md +0 -0
  55. {soup_cli-0.71.35 → soup_cli-0.71.36}/docker-compose.yml +0 -0
  56. {soup_cli-0.71.35 → soup_cli-0.71.36}/docs/README.md +0 -0
  57. {soup_cli-0.71.35 → soup_cli-0.71.36}/docs/adapters-and-governance.md +0 -0
  58. {soup_cli-0.71.35 → soup_cli-0.71.36}/docs/backends-and-ops.md +0 -0
  59. {soup_cli-0.71.35 → soup_cli-0.71.36}/docs/compliance.md +0 -0
  60. {soup_cli-0.71.35 → soup_cli-0.71.36}/docs/evaluation.md +0 -0
  61. {soup_cli-0.71.35 → soup_cli-0.71.36}/docs/models.md +0 -0
  62. {soup_cli-0.71.35 → soup_cli-0.71.36}/docs/performance-and-quantization.md +0 -0
  63. {soup_cli-0.71.35 → soup_cli-0.71.36}/examples/README.md +0 -0
  64. {soup_cli-0.71.35 → soup_cli-0.71.36}/examples/configs/dpo_chat.yaml +0 -0
  65. {soup_cli-0.71.35 → soup_cli-0.71.36}/examples/configs/dpo_example.yaml +0 -0
  66. {soup_cli-0.71.35 → soup_cli-0.71.36}/examples/configs/grpo_reasoning.yaml +0 -0
  67. {soup_cli-0.71.35 → soup_cli-0.71.36}/examples/configs/rlhf_step1_sft.yaml +0 -0
  68. {soup_cli-0.71.35 → soup_cli-0.71.36}/examples/configs/rlhf_step2_reward.yaml +0 -0
  69. {soup_cli-0.71.35 → soup_cli-0.71.36}/examples/configs/rlhf_step3_ppo.yaml +0 -0
  70. {soup_cli-0.71.35 → soup_cli-0.71.36}/examples/configs/sft_basic.yaml +0 -0
  71. {soup_cli-0.71.35 → soup_cli-0.71.36}/examples/configs/vision_llama.yaml +0 -0
  72. {soup_cli-0.71.35 → soup_cli-0.71.36}/examples/data/alpaca_tiny.jsonl +0 -0
  73. {soup_cli-0.71.35 → soup_cli-0.71.36}/examples/data/chat_preferences.jsonl +0 -0
  74. {soup_cli-0.71.35 → soup_cli-0.71.36}/examples/data/dpo_sample.jsonl +0 -0
  75. {soup_cli-0.71.35 → soup_cli-0.71.36}/examples/data/reasoning_math.jsonl +0 -0
  76. {soup_cli-0.71.35 → soup_cli-0.71.36}/examples/reward_hacking/rewards.py +0 -0
  77. {soup_cli-0.71.35 → soup_cli-0.71.36}/examples/synthetic_workflow.md +0 -0
  78. {soup_cli-0.71.35 → soup_cli-0.71.36}/examples/synthetic_workflow.yaml +0 -0
  79. {soup_cli-0.71.35 → soup_cli-0.71.36}/soup.png +0 -0
  80. {soup_cli-0.71.35 → soup_cli-0.71.36}/soup_logo_svg.svg +0 -0
  81. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/__main__.py +0 -0
  82. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/autopilot/__init__.py +0 -0
  83. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/autopilot/analyzer.py +0 -0
  84. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/autopilot/decisions.py +0 -0
  85. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/autopilot/generate_config.py +0 -0
  86. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/cans/__init__.py +0 -0
  87. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/cans/pack.py +0 -0
  88. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/cans/publish.py +0 -0
  89. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/cans/run.py +0 -0
  90. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/cans/schema.py +0 -0
  91. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/cans/unpack.py +0 -0
  92. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/cans/verify.py +0 -0
  93. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/cloud/__init__.py +0 -0
  94. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/cloud/modal.py +0 -0
  95. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/__init__.py +0 -0
  96. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/_eval_v0550.py +0 -0
  97. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/_eval_v0610.py +0 -0
  98. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/_eval_v0650.py +0 -0
  99. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/_eval_v07110.py +0 -0
  100. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/_webhook_cli.py +0 -0
  101. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/ab.py +0 -0
  102. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/active_sample.py +0 -0
  103. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/adapters.py +0 -0
  104. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/advise.py +0 -0
  105. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/agent.py +0 -0
  106. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/airgap.py +0 -0
  107. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/apple_adapter.py +0 -0
  108. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/attest.py +0 -0
  109. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/audit_log.py +0 -0
  110. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/autopilot.py +0 -0
  111. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/bench.py +0 -0
  112. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/bom.py +0 -0
  113. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/build.py +0 -0
  114. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/can.py +0 -0
  115. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/card.py +0 -0
  116. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/chat.py +0 -0
  117. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/ci.py +0 -0
  118. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/compile_cmd.py +0 -0
  119. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/compile_tools.py +0 -0
  120. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/completions.py +0 -0
  121. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/cost.py +0 -0
  122. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/data_doctor.py +0 -0
  123. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/data_forge.py +0 -0
  124. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/data_mix.py +0 -0
  125. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/data_score.py +0 -0
  126. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/delinearize_llama4.py +0 -0
  127. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/deploy.py +0 -0
  128. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/diagnose.py +0 -0
  129. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/diff.py +0 -0
  130. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/distill_prompt.py +0 -0
  131. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/doctor.py +0 -0
  132. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/draft.py +0 -0
  133. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/drift_alarm.py +0 -0
  134. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/edit.py +0 -0
  135. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/env.py +0 -0
  136. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/expect.py +0 -0
  137. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/fetch.py +0 -0
  138. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/history.py +0 -0
  139. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/infer.py +0 -0
  140. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/ingest.py +0 -0
  141. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/init.py +0 -0
  142. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/iterative_dpo.py +0 -0
  143. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/license_advisor.py +0 -0
  144. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/llama.py +0 -0
  145. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/local_rl.py +0 -0
  146. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/lock.py +0 -0
  147. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/loop.py +0 -0
  148. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/mcp.py +0 -0
  149. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/merge.py +0 -0
  150. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/migrate.py +0 -0
  151. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/monitor.py +0 -0
  152. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/plan.py +0 -0
  153. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/plugins.py +0 -0
  154. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/probe.py +0 -0
  155. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/profile.py +0 -0
  156. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/prune_prompt.py +0 -0
  157. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/push.py +0 -0
  158. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/quantize.py +0 -0
  159. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/quickstart.py +0 -0
  160. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/ra_dit.py +0 -0
  161. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/recipes.py +0 -0
  162. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/registry.py +0 -0
  163. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/runs.py +0 -0
  164. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/ship.py +0 -0
  165. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/shrink.py +0 -0
  166. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/spectrum.py +0 -0
  167. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/steer.py +0 -0
  168. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/sweep.py +0 -0
  169. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/tokenizer.py +0 -0
  170. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/tunability.py +0 -0
  171. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/commands/why.py +0 -0
  172. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/config/__init__.py +0 -0
  173. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/config/loader.py +0 -0
  174. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/__init__.py +0 -0
  175. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
  176. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
  177. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
  178. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
  179. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
  180. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
  181. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
  182. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
  183. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
  184. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
  185. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
  186. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
  187. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/augment.py +0 -0
  188. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/chat_templates.py +0 -0
  189. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/collators.py +0 -0
  190. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/formats.py +0 -0
  191. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/loss_mask.py +0 -0
  192. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/providers/__init__.py +0 -0
  193. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/providers/_utils.py +0 -0
  194. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/providers/anthropic.py +0 -0
  195. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/providers/ollama.py +0 -0
  196. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/providers/vllm.py +0 -0
  197. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/sft_format.py +0 -0
  198. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/templates/__init__.py +0 -0
  199. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/templates/code.py +0 -0
  200. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/templates/conversation.py +0 -0
  201. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/templates/preference.py +0 -0
  202. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/templates/qa.py +0 -0
  203. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/templates/reasoning.py +0 -0
  204. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/templates/tool_calling.py +0 -0
  205. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/templates/verifiable.py +0 -0
  206. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/traces/__init__.py +0 -0
  207. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/traces/pair_builder.py +0 -0
  208. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/traces/parsers.py +0 -0
  209. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/traces/quality.py +0 -0
  210. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/data/validator.py +0 -0
  211. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/envs/__init__.py +0 -0
  212. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/envs/_common.py +0 -0
  213. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/envs/calculator.py +0 -0
  214. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/envs/guess_number.py +0 -0
  215. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/envs/retrieval_qa.py +0 -0
  216. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/eval/__init__.py +0 -0
  217. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/eval/arena.py +0 -0
  218. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
  219. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/eval/calibrate.py +0 -0
  220. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
  221. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/eval/custom.py +0 -0
  222. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/eval/forgetting.py +0 -0
  223. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/eval/gate.py +0 -0
  224. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/eval/human.py +0 -0
  225. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/eval/judge.py +0 -0
  226. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/eval/leaderboard.py +0 -0
  227. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/eval/quant_check.py +0 -0
  228. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/experiment/__init__.py +0 -0
  229. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/experiment/tracker.py +0 -0
  230. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/mcp_server/__init__.py +0 -0
  231. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/mcp_server/registry.py +0 -0
  232. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/mcp_server/server.py +0 -0
  233. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/migrate/__init__.py +0 -0
  234. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/migrate/axolotl.py +0 -0
  235. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/migrate/common.py +0 -0
  236. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/migrate/llamafactory.py +0 -0
  237. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/migrate/unsloth.py +0 -0
  238. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/monitoring/__init__.py +0 -0
  239. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/monitoring/callback.py +0 -0
  240. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
  241. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/monitoring/display.py +0 -0
  242. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
  243. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/monitoring/hf_push.py +0 -0
  244. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/monitoring/plugin_callback.py +0 -0
  245. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/monitoring/trace_logger.py +0 -0
  246. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/plugins/__init__.py +0 -0
  247. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/py.typed +0 -0
  248. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/recipes/__init__.py +0 -0
  249. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/recipes/catalog.py +0 -0
  250. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/registry/__init__.py +0 -0
  251. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/registry/attach.py +0 -0
  252. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/registry/diff.py +0 -0
  253. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/registry/hashing.py +0 -0
  254. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/registry/store.py +0 -0
  255. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/__init__.py +0 -0
  256. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/audio.yaml +0 -0
  257. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/bco.yaml +0 -0
  258. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/chat.yaml +0 -0
  259. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/code.yaml +0 -0
  260. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/embedding.yaml +0 -0
  261. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/eu-ai-act.yaml +0 -0
  262. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
  263. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
  264. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
  265. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/hipaa.yaml +0 -0
  266. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/ipo.yaml +0 -0
  267. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/kto.yaml +0 -0
  268. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/longcontext.yaml +0 -0
  269. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/manifest.json +0 -0
  270. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/medical.yaml +0 -0
  271. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/moe.yaml +0 -0
  272. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/orpo.yaml +0 -0
  273. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/pretrain.yaml +0 -0
  274. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/reasoning.yaml +0 -0
  275. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/rlhf.yaml +0 -0
  276. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/simpo.yaml +0 -0
  277. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/soc2.yaml +0 -0
  278. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/sr-11-7.yaml +0 -0
  279. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/tool-calling.yaml +0 -0
  280. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/templates/vision.yaml +0 -0
  281. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/__init__.py +0 -0
  282. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/asr.py +0 -0
  283. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/bco.py +0 -0
  284. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/bitnet.py +0 -0
  285. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/classifier.py +0 -0
  286. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/distill.py +0 -0
  287. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/dpo.py +0 -0
  288. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/embedding.py +0 -0
  289. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/grpo.py +0 -0
  290. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/ipo.py +0 -0
  291. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/kto.py +0 -0
  292. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/mlx_dpo.py +0 -0
  293. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/mlx_grpo.py +0 -0
  294. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/mlx_routing.py +0 -0
  295. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/mlx_sft.py +0 -0
  296. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/mole_routing.py +0 -0
  297. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/online_dpo.py +0 -0
  298. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/orpo.py +0 -0
  299. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/ppo.py +0 -0
  300. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/preference.py +0 -0
  301. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/pretrain.py +0 -0
  302. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/prm.py +0 -0
  303. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/raft.py +0 -0
  304. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/reward_model.py +0 -0
  305. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/rewards.py +0 -0
  306. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/sft.py +0 -0
  307. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/simpo.py +0 -0
  308. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/tts.py +0 -0
  309. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/trainer/unlearn.py +0 -0
  310. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/tui_app.py +0 -0
  311. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/ui/__init__.py +0 -0
  312. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/ui/app.py +0 -0
  313. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/ui/plugins/__init__.py +0 -0
  314. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/ui/static/app.js +0 -0
  315. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/ui/static/index.html +0 -0
  316. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/ui/static/logo.png +0 -0
  317. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/ui/static/logo.svg +0 -0
  318. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/ui/static/style.css +0 -0
  319. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/__init__.py +0 -0
  320. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/_eval_text.py +0 -0
  321. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/ab_test.py +0 -0
  322. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/activation_offload.py +0 -0
  323. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/active_sampler.py +0 -0
  324. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_arithmetic.py +0 -0
  325. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_bisect.py +0 -0
  326. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_branch.py +0 -0
  327. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_diff.py +0 -0
  328. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_fuse.py +0 -0
  329. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_merge.py +0 -0
  330. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_pr.py +0 -0
  331. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_scan.py +0 -0
  332. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_sign.py +0 -0
  333. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/advanced_precision.py +0 -0
  334. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/advise.py +0 -0
  335. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/advise_history.py +0 -0
  336. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/agent_forge.py +0 -0
  337. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/agent_rollout.py +0 -0
  338. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/agent_sandbox.py +0 -0
  339. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/airgap_bundle.py +0 -0
  340. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/annex_xi.py +0 -0
  341. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/anthropic_messages.py +0 -0
  342. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/apple_adapter.py +0 -0
  343. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/asr_metrics.py +0 -0
  344. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/attest.py +0 -0
  345. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/audit_log.py +0 -0
  346. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/auto_quant.py +0 -0
  347. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/backend_detect.py +0 -0
  348. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/batch_probe.py +0 -0
  349. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/behavior_battery.py +0 -0
  350. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/best_of_n.py +0 -0
  351. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/bitnet.py +0 -0
  352. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/blame.py +0 -0
  353. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/block_expansion.py +0 -0
  354. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/bom.py +0 -0
  355. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/brain_rot.py +0 -0
  356. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/brain_rot_lang.py +0 -0
  357. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/build_dag.py +0 -0
  358. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/canary_discovery.py +0 -0
  359. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/canary_router.py +0 -0
  360. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/capability_suite.py +0 -0
  361. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/checklist_dsl.py +0 -0
  362. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
  363. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/ci_workflow.py +0 -0
  364. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/citation_faithful.py +0 -0
  365. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/classifier.py +0 -0
  366. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/cmaes_merge.py +0 -0
  367. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/compile_tools.py +0 -0
  368. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/completions.py +0 -0
  369. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/constants.py +0 -0
  370. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/convergence.py +0 -0
  371. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/crash.py +0 -0
  372. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/cross_doc_attn.py +0 -0
  373. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/curriculum.py +0 -0
  374. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
  375. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/cut_ce.py +0 -0
  376. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/data_doctor.py +0 -0
  377. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/data_forge.py +0 -0
  378. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/data_lint.py +0 -0
  379. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/data_mix.py +0 -0
  380. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/data_pipeline.py +0 -0
  381. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/data_score.py +0 -0
  382. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/deepspeed.py +0 -0
  383. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/delinearize_llama4.py +0 -0
  384. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/demo_bundles.py +0 -0
  385. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/deploy_autopilot.py +0 -0
  386. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/deploy_measure.py +0 -0
  387. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/__init__.py +0 -0
  388. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/_common.py +0 -0
  389. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/badge.py +0 -0
  390. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/citation.py +0 -0
  391. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/contamination.py +0 -0
  392. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
  393. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/format.py +0 -0
  394. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/live.py +0 -0
  395. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/memorization.py +0 -0
  396. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
  397. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/refusal.py +0 -0
  398. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/report.py +0 -0
  399. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/runner.py +0 -0
  400. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/distill.py +0 -0
  401. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/dpo_variants.py +0 -0
  402. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/draft.py +0 -0
  403. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/drift_alarm.py +0 -0
  404. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/ebft_gdpo.py +0 -0
  405. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/echo_trap.py +0 -0
  406. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/edit_diff.py +0 -0
  407. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/edit_governor.py +0 -0
  408. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/edit_kernels.py +0 -0
  409. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/encoding.py +0 -0
  410. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/energy.py +0 -0
  411. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/env_lock.py +0 -0
  412. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/errors.py +0 -0
  413. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/eval_design.py +0 -0
  414. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/eval_gate_hook.py +0 -0
  415. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
  416. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/evolve.py +0 -0
  417. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/expectations.py +0 -0
  418. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/fetch_examples.py +0 -0
  419. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/flash_attn.py +0 -0
  420. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/fp8.py +0 -0
  421. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/freeze.py +0 -0
  422. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/fsdp.py +0 -0
  423. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
  424. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/galore.py +0 -0
  425. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/gguf_quant.py +0 -0
  426. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/gpu_monitor.py +0 -0
  427. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/grace_codebook.py +0 -0
  428. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/graceful_save.py +0 -0
  429. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/grad_accum.py +0 -0
  430. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/gradient_ckpt.py +0 -0
  431. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/grpo_long_context.py +0 -0
  432. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/grpo_variants.py +0 -0
  433. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/hardware_fit.py +0 -0
  434. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/harm_probe.py +0 -0
  435. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/hf.py +0 -0
  436. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/hf_space.py +0 -0
  437. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/hubs.py +0 -0
  438. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/ingest_sources.py +0 -0
  439. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/integrations.py +0 -0
  440. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/interference.py +0 -0
  441. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/interference_live.py +0 -0
  442. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/irt.py +0 -0
  443. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/iterative_dpo.py +0 -0
  444. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/jinja_analyzer.py +0 -0
  445. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/kernel_picker.py +0 -0
  446. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/knowledge_edit.py +0 -0
  447. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/kv_cache.py +0 -0
  448. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/launcher.py +0 -0
  449. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/license_advisor.py +0 -0
  450. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/license_matrix.py +0 -0
  451. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/liger.py +0 -0
  452. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/lisa.py +0 -0
  453. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/llama_proxy.py +0 -0
  454. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/llama_server_timings.py +0 -0
  455. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/local_rl.py +0 -0
  456. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
  457. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/loftq_init.py +0 -0
  458. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/log_level.py +0 -0
  459. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/long_context.py +0 -0
  460. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/longlora.py +0 -0
  461. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/loop_budget.py +0 -0
  462. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/loop_daemon.py +0 -0
  463. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/loop_iteration.py +0 -0
  464. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/loop_stages.py +0 -0
  465. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/loop_state.py +0 -0
  466. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/lr_finder.py +0 -0
  467. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/lr_groups.py +0 -0
  468. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/magpie.py +0 -0
  469. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/metrics.py +0 -0
  470. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/mii.py +0 -0
  471. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/minillm.py +0 -0
  472. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/mix_proxy.py +0 -0
  473. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/mixed_precision.py +0 -0
  474. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/mlx.py +0 -0
  475. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/mod.py +0 -0
  476. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/moe.py +0 -0
  477. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/moe_quant.py +0 -0
  478. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/mole_routing.py +0 -0
  479. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/multipack.py +0 -0
  480. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/multipack_sampler.py +0 -0
  481. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/multipack_trainer.py +0 -0
  482. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/namespace_pin.py +0 -0
  483. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/neat_packing.py +0 -0
  484. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/ngram_spec.py +0 -0
  485. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/nlg_metrics.py +0 -0
  486. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/ollama.py +0 -0
  487. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/onboarding.py +0 -0
  488. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/optimizer_zoo.py +0 -0
  489. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/paths.py +0 -0
  490. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/peft_builder.py +0 -0
  491. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/peft_patches.py +0 -0
  492. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/peft_wiring.py +0 -0
  493. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/persona_hub.py +0 -0
  494. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/pipeline.py +0 -0
  495. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/preference_combine.py +0 -0
  496. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/prm.py +0 -0
  497. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/prm_reward.py +0 -0
  498. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/probe_kernel.py +0 -0
  499. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/probe_pack.py +0 -0
  500. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/profiler.py +0 -0
  501. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/profiling.py +0 -0
  502. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/profiling_v0_43.py +0 -0
  503. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/prompt_compile.py +0 -0
  504. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/prompt_distill.py +0 -0
  505. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/prune_prompt.py +0 -0
  506. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/qat.py +0 -0
  507. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/qr_url.py +0 -0
  508. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/quality.py +0 -0
  509. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/quant_menu.py +0 -0
  510. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/ra_dit.py +0 -0
  511. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/ra_dit_run.py +0 -0
  512. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/raft.py +0 -0
  513. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/reasoning_effort.py +0 -0
  514. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/reasoning_parser.py +0 -0
  515. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/recipe_dag.py +0 -0
  516. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/recipe_run.py +0 -0
  517. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/registry.py +0 -0
  518. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/relora.py +0 -0
  519. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/replay.py +0 -0
  520. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/repro_receipt.py +0 -0
  521. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/reward_hack_control.py +0 -0
  522. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/reward_hacking.py +0 -0
  523. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/ring_attention.py +0 -0
  524. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/rl_checkpoint.py +0 -0
  525. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
  526. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/run_cost.py +0 -0
  527. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/sae_diff.py +0 -0
  528. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/save_formats.py +0 -0
  529. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/server_tools.py +0 -0
  530. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/sglang.py +0 -0
  531. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/ship_verdict.py +0 -0
  532. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/shortcuts.py +0 -0
  533. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/shrink.py +0 -0
  534. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/signing.py +0 -0
  535. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/sleeper_probe.py +0 -0
  536. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/soup_lock.py +0 -0
  537. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/spec_pairing.py +0 -0
  538. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/spectrum_scan.py +0 -0
  539. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/spike_recovery.py +0 -0
  540. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/sse_train_stream.py +0 -0
  541. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/steering.py +0 -0
  542. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/strict_safetensors.py +0 -0
  543. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/structured_output.py +0 -0
  544. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/sweep_config.py +0 -0
  545. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/tail_latency.py +0 -0
  546. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/terraform_plan.py +0 -0
  547. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/tool_outputs.py +0 -0
  548. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/topology.py +0 -0
  549. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/tracing.py +0 -0
  550. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/trackers.py +0 -0
  551. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/train_event_buffer.py +0 -0
  552. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/trainer_plugins.py +0 -0
  553. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/trust_remote.py +0 -0
  554. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/truth_probe.py +0 -0
  555. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/tts.py +0 -0
  556. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/tts_codec.py +0 -0
  557. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/tunability.py +0 -0
  558. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/ui_env.py +0 -0
  559. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/uld.py +0 -0
  560. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/unlearn_kernels.py +0 -0
  561. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/unlearning.py +0 -0
  562. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/unlearning_eval.py +0 -0
  563. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/unsloth.py +0 -0
  564. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/v028_features.py +0 -0
  565. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/vector_bank.py +0 -0
  566. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/vllm.py +0 -0
  567. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/vscode_setup.py +0 -0
  568. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/warmup.py +0 -0
  569. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/webhooks.py +0 -0
  570. {soup_cli-0.71.35 → soup_cli-0.71.36}/src/soup_cli/utils/why.py +0 -0
  571. {soup_cli-0.71.35 → soup_cli-0.71.36}/templates/chat.yaml +0 -0
  572. {soup_cli-0.71.35 → soup_cli-0.71.36}/templates/code.yaml +0 -0
  573. {soup_cli-0.71.35 → soup_cli-0.71.36}/templates/medical.yaml +0 -0
  574. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/__init__.py +0 -0
  575. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/conftest.py +0 -0
  576. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/qa/v053_qa.md +0 -0
  577. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/qa/v07114_qa.md +0 -0
  578. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/qa/v0716_qa.md +0 -0
  579. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_adapters.py +0 -0
  580. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_advanced_peft.py +0 -0
  581. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_assistant_mask.py +0 -0
  582. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_audio.py +0 -0
  583. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_auto_tuning.py +0 -0
  584. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_autopilot.py +0 -0
  585. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_awq_gptq_export.py +0 -0
  586. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_batch_probe.py +0 -0
  587. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_bco.py +0 -0
  588. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_bench.py +0 -0
  589. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_brain_rot_multilingual.py +0 -0
  590. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_bugfixes.py +0 -0
  591. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_build_dag.py +0 -0
  592. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_callback.py +0 -0
  593. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_cans.py +0 -0
  594. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_chat.py +0 -0
  595. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_chat_template.py +0 -0
  596. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_cli.py +0 -0
  597. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_cli_subprocess.py +0 -0
  598. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_code_review_critical.py +0 -0
  599. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_code_review_deferred.py +0 -0
  600. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_code_review_high.py +0 -0
  601. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_code_review_medium_low.py +0 -0
  602. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_code_review_recurring.py +0 -0
  603. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_config.py +0 -0
  604. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_cost.py +0 -0
  605. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_crash_reporter.py +0 -0
  606. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_curriculum.py +0 -0
  607. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_data.py +0 -0
  608. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_data_augment.py +0 -0
  609. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_data_sample.py +0 -0
  610. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_data_split.py +0 -0
  611. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_data_tools.py +0 -0
  612. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_dataset_hub.py +0 -0
  613. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_dataset_registry.py +0 -0
  614. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_deepspeed.py +0 -0
  615. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_deploy_ollama.py +0 -0
  616. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_diff.py +0 -0
  617. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_display.py +0 -0
  618. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_doctor.py +0 -0
  619. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_dpo_example.py +0 -0
  620. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_dpo_variants.py +0 -0
  621. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_embedding.py +0 -0
  622. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_errors.py +0 -0
  623. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_eval.py +0 -0
  624. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_eval_gate.py +0 -0
  625. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_eval_platform.py +0 -0
  626. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_export.py +0 -0
  627. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_formats.py +0 -0
  628. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_fp8_recipe.py +0 -0
  629. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_freeze_training.py +0 -0
  630. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_generate.py +0 -0
  631. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_gpu.py +0 -0
  632. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_grpo.py +0 -0
  633. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_hf_integration.py +0 -0
  634. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_infer.py +0 -0
  635. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_inference_advanced.py +0 -0
  636. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_init.py +0 -0
  637. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_ipo.py +0 -0
  638. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_jinja_analyzer.py +0 -0
  639. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_kto.py +0 -0
  640. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_loader.py +0 -0
  641. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_log_level.py +0 -0
  642. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_loss_watchdog.py +0 -0
  643. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_merge.py +0 -0
  644. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_migrate.py +0 -0
  645. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_mlx_backend.py +0 -0
  646. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_moe.py +0 -0
  647. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_multi_adapter.py +0 -0
  648. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_multi_gpu.py +0 -0
  649. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_multipack_config.py +0 -0
  650. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_multipack_invariants.py +0 -0
  651. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_multipack_sampler.py +0 -0
  652. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_neat_packing.py +0 -0
  653. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_neftune_rslora.py +0 -0
  654. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_onnx_tensorrt_export.py +0 -0
  655. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_orpo.py +0 -0
  656. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_packing.py +0 -0
  657. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_part_a_wave1.py +0 -0
  658. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_part_a_wave2.py +0 -0
  659. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_part_b.py +0 -0
  660. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_part_c.py +0 -0
  661. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_part_d.py +0 -0
  662. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_part_e.py +0 -0
  663. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_part_f_hardening.py +0 -0
  664. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_peft_methods.py +0 -0
  665. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_peft_patches.py +0 -0
  666. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_performance.py +0 -0
  667. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_pissa_init.py +0 -0
  668. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_ppo.py +0 -0
  669. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_preference_dispatcher.py +0 -0
  670. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_preference_multi.py +0 -0
  671. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_preference_multi_runtime.py +0 -0
  672. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_pretrain.py +0 -0
  673. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_profile.py +0 -0
  674. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_profiling.py +0 -0
  675. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_progress.py +0 -0
  676. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_push.py +0 -0
  677. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_qat.py +0 -0
  678. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_quality_filter.py +0 -0
  679. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_quant_check.py +0 -0
  680. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_quant_menu.py +0 -0
  681. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_quickstart.py +0 -0
  682. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_rank_pattern.py +0 -0
  683. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_recipes.py +0 -0
  684. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_recipes_v031.py +0 -0
  685. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_refusal_multilingual.py +0 -0
  686. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_registry.py +0 -0
  687. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_relora.py +0 -0
  688. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_replay.py +0 -0
  689. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_resume.py +0 -0
  690. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_review_fixes_v07133.py +0 -0
  691. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_rlvr.py +0 -0
  692. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_run_cost.py +0 -0
  693. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_runs.py +0 -0
  694. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_serve.py +0 -0
  695. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_server_generate.py +0 -0
  696. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_sglang_serve.py +0 -0
  697. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_simpo.py +0 -0
  698. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_smoke_train.py +0 -0
  699. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_speculative_decoding.py +0 -0
  700. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_sweep.py +0 -0
  701. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_synth_data_pro.py +0 -0
  702. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_templates_yaml.py +0 -0
  703. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_tensorboard.py +0 -0
  704. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_tool_calling.py +0 -0
  705. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_trace_to_pref.py +0 -0
  706. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_tracker.py +0 -0
  707. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_trainer_coverage_v035.py +0 -0
  708. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_trainer_init.py +0 -0
  709. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_training_intelligence.py +0 -0
  710. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_training_speed.py +0 -0
  711. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_trust_remote_code.py +0 -0
  712. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_tui.py +0 -0
  713. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_ui.py +0 -0
  714. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_ui_chat.py +0 -0
  715. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_ui_config_builder.py +0 -0
  716. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_ui_live_monitor.py +0 -0
  717. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_ui_metrics.py +0 -0
  718. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_unsloth.py +0 -0
  719. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0401_part_c.py +0 -0
  720. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0401_part_d.py +0 -0
  721. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0401_part_e.py +0 -0
  722. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0402_part_a.py +0 -0
  723. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0402_part_b.py +0 -0
  724. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0403_part_a.py +0 -0
  725. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0403_part_b.py +0 -0
  726. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0403_part_c.py +0 -0
  727. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0404_part_a.py +0 -0
  728. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0404_part_b.py +0 -0
  729. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0405_part_a.py +0 -0
  730. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0406_part_a.py +0 -0
  731. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0410_part_a.py +0 -0
  732. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0410_part_b.py +0 -0
  733. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0410_part_c.py +0 -0
  734. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0420.py +0 -0
  735. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0430_part_a.py +0 -0
  736. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0430_part_b.py +0 -0
  737. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0430_part_c.py +0 -0
  738. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0430_part_d.py +0 -0
  739. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0440_part_a.py +0 -0
  740. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0440_part_b.py +0 -0
  741. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0440_part_c.py +0 -0
  742. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0440_part_d.py +0 -0
  743. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0440_review_followups.py +0 -0
  744. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0450.py +0 -0
  745. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0460_part_a.py +0 -0
  746. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0460_part_b.py +0 -0
  747. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0470_part_a.py +0 -0
  748. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0470_part_b.py +0 -0
  749. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0480_part_a.py +0 -0
  750. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0480_part_b.py +0 -0
  751. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0490.py +0 -0
  752. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0500_part_a.py +0 -0
  753. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0500_part_b.py +0 -0
  754. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0500_part_c.py +0 -0
  755. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0500_part_d.py +0 -0
  756. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0500_part_e.py +0 -0
  757. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0510.py +0 -0
  758. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0520.py +0 -0
  759. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0530.py +0 -0
  760. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v05310.py +0 -0
  761. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v05311.py +0 -0
  762. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0531_109.py +0 -0
  763. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0531_139.py +0 -0
  764. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0531_142.py +0 -0
  765. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0531_82.py +0 -0
  766. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0532.py +0 -0
  767. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0533.py +0 -0
  768. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0534.py +0 -0
  769. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0535.py +0 -0
  770. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0536.py +0 -0
  771. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0537.py +0 -0
  772. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0538.py +0 -0
  773. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0539.py +0 -0
  774. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0540.py +0 -0
  775. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0550.py +0 -0
  776. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0550_followups.py +0 -0
  777. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0560.py +0 -0
  778. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0570_part_a.py +0 -0
  779. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0570_part_b.py +0 -0
  780. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0570_part_c.py +0 -0
  781. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0570_part_d.py +0 -0
  782. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0580.py +0 -0
  783. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0590.py +0 -0
  784. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0600_part_a.py +0 -0
  785. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0600_part_b.py +0 -0
  786. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0600_part_c.py +0 -0
  787. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0600_part_d.py +0 -0
  788. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0600_part_e.py +0 -0
  789. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0600_part_f.py +0 -0
  790. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0610_part_a.py +0 -0
  791. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0610_part_b.py +0 -0
  792. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0610_part_c.py +0 -0
  793. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0610_part_d.py +0 -0
  794. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0610_part_e.py +0 -0
  795. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0620_followups.py +0 -0
  796. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0620_part_a.py +0 -0
  797. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0620_part_b.py +0 -0
  798. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0620_part_c.py +0 -0
  799. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0620_part_d.py +0 -0
  800. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0620_part_e.py +0 -0
  801. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0630_followups.py +0 -0
  802. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0630_part_a.py +0 -0
  803. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0630_part_b.py +0 -0
  804. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0630_part_c.py +0 -0
  805. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0630_part_d.py +0 -0
  806. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0630_part_e.py +0 -0
  807. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0631_206.py +0 -0
  808. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0640_followups.py +0 -0
  809. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0640_part_a.py +0 -0
  810. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0640_part_b.py +0 -0
  811. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0640_part_c.py +0 -0
  812. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0640_part_d.py +0 -0
  813. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0640_part_e.py +0 -0
  814. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0640_part_f.py +0 -0
  815. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0650_followups.py +0 -0
  816. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0650_part_a.py +0 -0
  817. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0650_part_b.py +0 -0
  818. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0650_part_c.py +0 -0
  819. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0650_part_d.py +0 -0
  820. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0650_part_e.py +0 -0
  821. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0660_cli.py +0 -0
  822. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0660_followups.py +0 -0
  823. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0660_part_a.py +0 -0
  824. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0660_part_b.py +0 -0
  825. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0660_part_c.py +0 -0
  826. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0660_part_d.py +0 -0
  827. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0660_part_e.py +0 -0
  828. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0670_followups.py +0 -0
  829. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0670_part_a.py +0 -0
  830. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0670_part_b.py +0 -0
  831. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0670_part_c.py +0 -0
  832. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0670_part_d.py +0 -0
  833. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0670_part_e.py +0 -0
  834. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0670_part_f.py +0 -0
  835. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0680_followups.py +0 -0
  836. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0680_part_a.py +0 -0
  837. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0680_part_b.py +0 -0
  838. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0680_part_c.py +0 -0
  839. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0680_part_d.py +0 -0
  840. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0680_part_e.py +0 -0
  841. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0690_part_a.py +0 -0
  842. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0690_part_b.py +0 -0
  843. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0690_part_c.py +0 -0
  844. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0690_part_d.py +0 -0
  845. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0690_part_e.py +0 -0
  846. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0700_part_a.py +0 -0
  847. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0700_part_b.py +0 -0
  848. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0700_part_c.py +0 -0
  849. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0700_part_d.py +0 -0
  850. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0700_part_e.py +0 -0
  851. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0700_part_f.py +0 -0
  852. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07110.py +0 -0
  853. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07111.py +0 -0
  854. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07112.py +0 -0
  855. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07113.py +0 -0
  856. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07114.py +0 -0
  857. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07115.py +0 -0
  858. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07116.py +0 -0
  859. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07117.py +0 -0
  860. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07118.py +0 -0
  861. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07119.py +0 -0
  862. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0712.py +0 -0
  863. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07120.py +0 -0
  864. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07121.py +0 -0
  865. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07122.py +0 -0
  866. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07123.py +0 -0
  867. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07124.py +0 -0
  868. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07125.py +0 -0
  869. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07126.py +0 -0
  870. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07127.py +0 -0
  871. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07128.py +0 -0
  872. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07129.py +0 -0
  873. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0713.py +0 -0
  874. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07130.py +0 -0
  875. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07131.py +0 -0
  876. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07132.py +0 -0
  877. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07133.py +0 -0
  878. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07134.py +0 -0
  879. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v07135.py +0 -0
  880. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0714.py +0 -0
  881. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0715.py +0 -0
  882. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0716.py +0 -0
  883. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0717.py +0 -0
  884. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0718.py +0 -0
  885. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_v0719.py +0 -0
  886. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_validator.py +0 -0
  887. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_vision.py +0 -0
  888. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_vllm_serve.py +0 -0
  889. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_warmup.py +0 -0
  890. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_why.py +0 -0
  891. {soup_cli-0.71.35 → soup_cli-0.71.36}/tests/test_windows_encoding.py +0 -0
@@ -12,6 +12,71 @@ reproducing 70+ versions of notes.
12
12
 
13
13
  ## [Unreleased]
14
14
 
15
+ ## [0.71.36] - 2026-07-16
16
+
17
+ **Data Moat II** — a semantic layer over your training data, plus two tools for
18
+ what a fine-tune forgets and leaks.
19
+
20
+ ### Added
21
+
22
+ - **`soup data dedup --semantic`** — near-duplicate removal over embedding
23
+ cosine instead of MinHash shingling. Catches *reworded* duplicates that
24
+ MinHash misses (measured: 0.88–0.91 cosine on rewordings MinHash scored as
25
+ distinct) while correctly keeping distinct-but-similar instructions. Zero new
26
+ dependencies: uses `transformers` from the `[train]` extra. **Read the
27
+ known-limitation below before lowering `--threshold`.**
28
+ - **`soup data topics <data>`** — cluster a dataset and label each cluster with
29
+ c-TF-IDF terms, plus a coverage table (`82% code · 6% math`) and a warning for
30
+ thin topics. Labels are *emergent term clusters*, not a fixed taxonomy.
31
+ - **`soup data canary insert|check`** — Secret-Sharer memorization probe. Insert
32
+ K high-entropy secrets, then check any model/adapter: each secret's loss is
33
+ ranked against never-inserted controls drawn from the same space. Exit 2 on
34
+ MAJOR so CI can gate. Measured on SmolLM2-135M: a memorized set lands at
35
+ percentile 0.0 (loss 1.7–2.5) against a clean model's 4.1–6.2.
36
+ - **`soup train --replay old.jsonl --replay-ratio 0.1`** — continual-learning
37
+ rehearsal. Interleaves a seeded sample of an old dataset into training so a
38
+ new task does not erase the old one. `r` is the fraction of the **final**
39
+ mixed set (`n_replay = round(r/(1-r) · n_new)`), rows are interleaved rather
40
+ than appended, and an undersized pool reports the shortfall instead of
41
+ repeating rows. Mixed into `train` only — validation stays pure new-task.
42
+
43
+ ### Fixed
44
+
45
+ - **The hardware-fit gate refused to train any local checkpoint.** A merged
46
+ model (`soup merge -o ./mymodel`) has no size marker in its name, so the size
47
+ guesser returned its 7B default, predicted ~16 GB of VRAM and refused. Local
48
+ checkpoints are now *measured* from their safetensors header (0.135B actual vs
49
+ 7.0B guessed) — this had blocked `soup merge` → train-from-merged entirely.
50
+ Third instance of this class after the v0.71.32 (Whisper) and v0.71.33
51
+ (`M` suffix) fixes.
52
+ - **`pip install 'soup-cli[extra]'` hints printed without the extra.** Rich ate
53
+ the bracket, so every "install the missing dependency" message across 17 sites
54
+ told users to run `pip install 'soup-cli'` — which succeeds and still leaves
55
+ the feature broken. Affected `[eval]`, `[data]`, `[serve]`, `[ui]`, `[tui]`,
56
+ `[compile]`, `[mcp]`, `[carbon]` and others, including Typer help text.
57
+ - Replay rows bypassed the image/audio path-traversal validation that the
58
+ primary dataset receives.
59
+
60
+ ### Known limitations
61
+
62
+ - **Semantic dedup is not a paraphrase detector.** Measured with
63
+ all-MiniLM-L6-v2, paraphrase cosines (0.49–0.76) **overlap** with
64
+ genuinely-distinct rows (0.54–0.76): "Add two numbers" vs "Multiply two
65
+ numbers" scores 0.759, *higher* than the true paraphrase "reverse a string" /
66
+ "invert the order of characters" at 0.491. **No threshold separates them**, so
67
+ lowering `--threshold` to chase paraphrases deletes real training rows. The
68
+ default (0.8) is deliberately conservative.
69
+ - **Replay is validated at proof-of-mechanism scale.** On SmolLM2-135M + LoRA,
70
+ replay retained the old task 7% better than a no-replay control — the correct
71
+ direction — but forgetting without it was only +4%, i.e. mild. The effect size
72
+ at full fine-tuning or 7B+ is unproven on a 4 GB box.
73
+ - **Canary exposure is the sampled-control approximation**, not full-space rank
74
+ enumeration. "No exposure" is not proof of no memorization.
75
+ - **`data topics` / `dedup --semantic` require `[train]`** (torch) and download
76
+ an embedding model. Plain MinHash `dedup` stays on the light core.
77
+ - Replay v1 is `sft`/`pretrain` only and is incompatible with
78
+ `packing`/`multipack`.
79
+
15
80
  ## [0.71.35] - 2026-07-15
16
81
 
17
82
  ### Added
@@ -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 (313 files, 16001 tests)
123
+ tests/ - Test suite (314 files, 16283 tests)
124
124
  examples/ - Real-world config examples and datasets
125
125
  ```
126
126
 
@@ -150,7 +150,7 @@ pytest tests/test_data.py::test_detect_alpaca_format -v
150
150
  pytest tests/ --cov=soup_cli --cov-report=html
151
151
  ```
152
152
 
153
- ### Test Files (307 files)
153
+ ### Test Files (313 files)
154
154
 
155
155
  > A representative sample of the suite below. Run `pytest tests/ -v` for the complete list.
156
156
 
@@ -388,7 +388,7 @@ If adding a new training algorithm:
388
388
 
389
389
  1. Create `trainer/your_trainer.py` wrapping the appropriate TRL trainer
390
390
  2. Add config fields to `config/schema.py` (Pydantic v2)
391
- 3. Add template to `config/schema.py` (see existing 15 templates)
391
+ 3. Add a template YAML under `src/soup_cli/templates/` + a `manifest.json` entry (see the existing 21 templates)
392
392
  4. Update `commands/train.py` to route to your trainer
393
393
  5. Add 30+ tests in `tests/test_your_trainer.py`
394
394
  6. Update `README.md` + the relevant page under `docs/`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: soup-cli
3
- Version: 0.71.35
3
+ Version: 0.71.36
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,34 +193,36 @@ infrastructure instead of improving models. Soup fixes that.
193
193
 
194
194
  ## What's New
195
195
 
196
- **v0.71.35the compliance pack.** Ship a regulated fine-tune with the paperwork it needs: start from a regulation-shaped config, publish a provenance-carrying model card, and gate every PR in CI.
197
-
198
- - **`soup init --template hipaa|soc2|eu-ai-act|sr-11-7`.** Four regulation-shaped starting
199
- configs, each documenting the exact commands for that regime — PHI scrubbing + air-gap,
200
- BOM/attest/sign, EU Annex XI + energy tracking, or repro-receipt + diagnose/ship.
201
- - **`soup card <registry-id>` `MODELCARD.md`.** Turn a registry entry into a publishable HF
202
- model card: training config, eval scorecard, config/data hashes, lineage, and every
203
- registered artifact. `soup push --card` uploads it as the README, so every public push
204
- carries its provenance.
205
- - **`soup ci init` fine-tuning CI.** Writes a GitHub Actions gate that runs
206
- `data validate` `expect` → `ship --evidence` on each PR; a regression exits 2 and
207
- blocks the merge.
208
- - **Compliance quickstart** ([docs/compliance.md](docs/compliance.md)) the whole path from
209
- template to air-gapped, signed, attested, carded model.
210
- - **GGUF export fixed on Windows.** Validated end-to-end for the first time (SmolLM2
211
- q4_0/q4_k_m/q8_0/f16 Ollama live inference), which surfaced four real bugs: the export
212
- cloned llama.cpp into your *current directory*, its first run **downgraded your PyTorch to
213
- CPU-only** (breaking CUDA), a correctly-built llama.cpp wasn't found under MSVC, and
214
- `deploy ollama` rejected relative GGUF paths. All fixed.
215
- - **Hardening:** the model-card generator (including the existing `soup push` card) no longer
216
- interpolates unescaped config values a crafted `base`/`scheduler` can't smuggle HTML into
217
- a card published on the Hub.
196
+ **v0.71.36Data Moat II.** A semantic layer over your training data, plus two tools for what a fine-tune forgets and what it leaks.
197
+
198
+ - **`soup data dedup --semantic`** dedup by meaning, not by shared tokens. Catches
199
+ *reworded* duplicates MinHash's shingling scores as distinct. Zero new dependencies.
200
+ - **`soup data topics <data>`** cluster your data and get a coverage table
201
+ (`82% code · 6% math · 1% safety`) with a warning for thin topics, so you can see what
202
+ you are actually training on.
203
+ - **`soup data canary insert|check`** insert unique secrets, then prove whether a model
204
+ memorized them: each secret's loss is ranked against never-inserted controls. Exit 2 on a
205
+ leak, so CI can gate. On SmolLM2-135M a memorized set lands at percentile 0.0 against a
206
+ clean model's 4%–93% spread.
207
+ - **`soup train --replay old.jsonl`** — continual-learning rehearsal: interleave your old
208
+ data so the new task doesn't erase it.
209
+ - **Honest result:** semantic dedup is **not** a paraphrase detector. Measured, paraphrase
210
+ cosines (0.49–0.76) *overlap* with genuinely-distinct rows (0.54–0.76) "Add two numbers"
211
+ vs "Multiply two numbers" scores **higher** than a real paraphrase so no threshold
212
+ separates them. The default is deliberately conservative; see the CHANGELOG.
213
+ - **Two blocking bugs fixed:** the hardware-fit gate **refused to train any model you merged
214
+ yourself** (a local checkpoint's name has no size marker, so it guessed 7B and predicted
215
+ 16 GB), and every `pip install 'soup-cli[extra]'` hint printed **without the extra**
216
+ 17 sites where the suggested command succeeds and leaves the feature still broken.
218
217
 
219
218
  ```bash
220
- soup adapters arithmetic "coder - toxic" \
221
- --adapter coder=./coder-lora --adapter toxic=./toxic-lora -o ./cleaned
219
+ soup data topics train.jsonl # what am I actually training on?
220
+ soup data dedup train.jsonl --semantic -o clean.jsonl
222
221
 
223
- soup train --config sft.yaml # with training.lisa_enabled: true, lisa_num_layers: 2
222
+ soup data canary insert train.jsonl -o canaried.jsonl --manifest secrets.json
223
+ soup data canary check --manifest secrets.json --base ./my-model # exit 2 = leak
224
+
225
+ soup train --config sft.yaml --replay old_task.jsonl --replay-ratio 0.1
224
226
  ```
225
227
 
226
228
  <details>
@@ -320,6 +322,7 @@ The full feature reference lives in [`docs/`](docs/). Start here:
320
322
  | [Evaluation & probes](docs/evaluation.md) | Eval design/gate, eval-gated training, benchmarks, NLG metrics, calibration, Elo arena, diagnose, post-train X-ray probes, A/B, drift, tunability, `soup advise` |
321
323
  | [Serving & export](docs/serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding (train + measure your own draft), deploy autopilot, Web UI, Agent Forge |
322
324
  | [Adapters, registry & governance](docs/adapters-and-governance.md) | Adapter lifecycle/management, model registry, Soup Cans, the data flywheel (`soup loop`), knowledge editing, steering, supply-chain controls (scan/sign/BOM/attest/audit/airgap) |
325
+ | [Compliance & governance quickstart](docs/compliance.md) | HIPAA/SOC2/EU-AI-Act/SR-11-7 `init` templates, provenance (BOM/attest/repro-receipt), audit log, air-gap, model-card autogen (`soup card`), CI gate (`soup ci init`) |
323
326
  | [Backends, platform & ops](docs/backends-and-ops.md) | MLX/Unsloth backends, alternative hubs, HF Hub integration, autopilot, experiment tracking, plan/apply, env lockfiles, hardware-fit, completions, plugins, utility commands |
324
327
  | [Command reference](docs/commands.md) | The full `soup` command list |
325
328
  | [Supported models & extras](docs/models.md) | Recommended model families, the VRAM size guide, the pip extras matrix |
@@ -49,34 +49,36 @@ infrastructure instead of improving models. Soup fixes that.
49
49
 
50
50
  ## What's New
51
51
 
52
- **v0.71.35the compliance pack.** Ship a regulated fine-tune with the paperwork it needs: start from a regulation-shaped config, publish a provenance-carrying model card, and gate every PR in CI.
53
-
54
- - **`soup init --template hipaa|soc2|eu-ai-act|sr-11-7`.** Four regulation-shaped starting
55
- configs, each documenting the exact commands for that regime — PHI scrubbing + air-gap,
56
- BOM/attest/sign, EU Annex XI + energy tracking, or repro-receipt + diagnose/ship.
57
- - **`soup card <registry-id>` `MODELCARD.md`.** Turn a registry entry into a publishable HF
58
- model card: training config, eval scorecard, config/data hashes, lineage, and every
59
- registered artifact. `soup push --card` uploads it as the README, so every public push
60
- carries its provenance.
61
- - **`soup ci init` fine-tuning CI.** Writes a GitHub Actions gate that runs
62
- `data validate` `expect` → `ship --evidence` on each PR; a regression exits 2 and
63
- blocks the merge.
64
- - **Compliance quickstart** ([docs/compliance.md](docs/compliance.md)) the whole path from
65
- template to air-gapped, signed, attested, carded model.
66
- - **GGUF export fixed on Windows.** Validated end-to-end for the first time (SmolLM2
67
- q4_0/q4_k_m/q8_0/f16 Ollama live inference), which surfaced four real bugs: the export
68
- cloned llama.cpp into your *current directory*, its first run **downgraded your PyTorch to
69
- CPU-only** (breaking CUDA), a correctly-built llama.cpp wasn't found under MSVC, and
70
- `deploy ollama` rejected relative GGUF paths. All fixed.
71
- - **Hardening:** the model-card generator (including the existing `soup push` card) no longer
72
- interpolates unescaped config values a crafted `base`/`scheduler` can't smuggle HTML into
73
- a card published on the Hub.
52
+ **v0.71.36Data Moat II.** A semantic layer over your training data, plus two tools for what a fine-tune forgets and what it leaks.
53
+
54
+ - **`soup data dedup --semantic`** dedup by meaning, not by shared tokens. Catches
55
+ *reworded* duplicates MinHash's shingling scores as distinct. Zero new dependencies.
56
+ - **`soup data topics <data>`** cluster your data and get a coverage table
57
+ (`82% code · 6% math · 1% safety`) with a warning for thin topics, so you can see what
58
+ you are actually training on.
59
+ - **`soup data canary insert|check`** insert unique secrets, then prove whether a model
60
+ memorized them: each secret's loss is ranked against never-inserted controls. Exit 2 on a
61
+ leak, so CI can gate. On SmolLM2-135M a memorized set lands at percentile 0.0 against a
62
+ clean model's 4%–93% spread.
63
+ - **`soup train --replay old.jsonl`** — continual-learning rehearsal: interleave your old
64
+ data so the new task doesn't erase it.
65
+ - **Honest result:** semantic dedup is **not** a paraphrase detector. Measured, paraphrase
66
+ cosines (0.49–0.76) *overlap* with genuinely-distinct rows (0.54–0.76) "Add two numbers"
67
+ vs "Multiply two numbers" scores **higher** than a real paraphrase so no threshold
68
+ separates them. The default is deliberately conservative; see the CHANGELOG.
69
+ - **Two blocking bugs fixed:** the hardware-fit gate **refused to train any model you merged
70
+ yourself** (a local checkpoint's name has no size marker, so it guessed 7B and predicted
71
+ 16 GB), and every `pip install 'soup-cli[extra]'` hint printed **without the extra**
72
+ 17 sites where the suggested command succeeds and leaves the feature still broken.
74
73
 
75
74
  ```bash
76
- soup adapters arithmetic "coder - toxic" \
77
- --adapter coder=./coder-lora --adapter toxic=./toxic-lora -o ./cleaned
75
+ soup data topics train.jsonl # what am I actually training on?
76
+ soup data dedup train.jsonl --semantic -o clean.jsonl
78
77
 
79
- soup train --config sft.yaml # with training.lisa_enabled: true, lisa_num_layers: 2
78
+ soup data canary insert train.jsonl -o canaried.jsonl --manifest secrets.json
79
+ soup data canary check --manifest secrets.json --base ./my-model # exit 2 = leak
80
+
81
+ soup train --config sft.yaml --replay old_task.jsonl --replay-ratio 0.1
80
82
  ```
81
83
 
82
84
  <details>
@@ -176,6 +178,7 @@ The full feature reference lives in [`docs/`](docs/). Start here:
176
178
  | [Evaluation & probes](docs/evaluation.md) | Eval design/gate, eval-gated training, benchmarks, NLG metrics, calibration, Elo arena, diagnose, post-train X-ray probes, A/B, drift, tunability, `soup advise` |
177
179
  | [Serving & export](docs/serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding (train + measure your own draft), deploy autopilot, Web UI, Agent Forge |
178
180
  | [Adapters, registry & governance](docs/adapters-and-governance.md) | Adapter lifecycle/management, model registry, Soup Cans, the data flywheel (`soup loop`), knowledge editing, steering, supply-chain controls (scan/sign/BOM/attest/audit/airgap) |
181
+ | [Compliance & governance quickstart](docs/compliance.md) | HIPAA/SOC2/EU-AI-Act/SR-11-7 `init` templates, provenance (BOM/attest/repro-receipt), audit log, air-gap, model-card autogen (`soup card`), CI gate (`soup ci init`) |
179
182
  | [Backends, platform & ops](docs/backends-and-ops.md) | MLX/Unsloth backends, alternative hubs, HF Hub integration, autopilot, experiment tracking, plan/apply, env lockfiles, hardware-fit, completions, plugins, utility commands |
180
183
  | [Command reference](docs/commands.md) | The full `soup` command list |
181
184
  | [Supported models & extras](docs/models.md) | Recommended model families, the VRAM size guide, the pip extras matrix |
@@ -11,6 +11,7 @@ soup init [--template chat|code|...|audio] Create config
11
11
  soup init --template hipaa|soc2|eu-ai-act|sr-11-7 Compliance-shaped starting config + the commands for that regime (v0.71.35)
12
12
  soup autopilot --model <id> --data d.jsonl --goal <g> Zero-configsoup train --config soup.yaml Start training
13
13
  soup train --config soup.yaml --tensorboard Train with TensorBoard logging
14
+ soup train --config soup.yaml --replay old.jsonl --replay-ratio 0.1 Continual-learning rehearsal: interleave old data so the new task doesn't erase it (sft/pretrain)
14
15
  soup train --config soup.yaml --fsdp full_shard Train with FSDP2
15
16
  soup train --config soup.yaml --deepspeed zero++ DeepSpeed ZeRO++ (quantized comms)
16
17
  soup train --config soup.yaml --gpus auto|N Multi-GPU launch hint
@@ -77,6 +78,10 @@ soup data lint <path> Preference-data linter: length bia
77
78
  soup data convert <path> --to chatml Convert between formats
78
79
  soup data merge data1.jsonl data2.jsonl Combine datasets
79
80
  soup data dedup <path> --threshold 0.8 Remove duplicates (MinHash)
81
+ soup data dedup <path> --semantic Dedup by embedding cosine — catches rewordings MinHash misses ([train])
82
+ soup data topics <path> [--clusters N|auto] Cluster + c-TF-IDF labels + coverage table + thin-topic warnings ([train])
83
+ soup data canary insert <path> -o <out> --manifest <m> Insert K secrets to later prove memorization (manifest = SECRET)
84
+ soup data canary check --manifest <m> --base <model> Rank each secret's loss vs never-inserted controls; exit 2 = leak
80
85
  soup data stats <path> Extended statistics
81
86
  soup data generate --prompt "..." --count 100 Generate synthetic data
82
87
  soup data generate ... --provider ollama Use local Ollama instance
@@ -22,6 +22,9 @@
22
22
  - [Synthetic Data Forge](#synthetic-data-forge)
23
23
  - [Data Quality Scorecard](#data-quality-scorecard)
24
24
  - [Remote Datasets (S3 / GCS / Azure / OCI)](#remote-datasets-s3--gcs--azure--oci)
25
+ - [Semantic dedup (`soup data dedup --semantic`)](#semantic-dedup-soup-data-dedup---semantic)
26
+ - [Topic map (`soup data topics`)](#topic-map-soup-data-topics)
27
+ - [Canaries (`soup data canary insertcheck`)](#canaries-soup-data-canary-insertcheck)
25
28
  - [Data Recipe DAG](#data-recipe-dag)
26
29
  - [Data Mixing Optimizer (BETA)](#data-mixing-optimizer-beta)
27
30
  - [AOT Tokenization with `soup data preprocess`](#aot-tokenization-with-soup-data-preprocess)
@@ -29,6 +32,125 @@
29
32
 
30
33
  ---
31
34
 
35
+ ## Semantic dedup (`soup data dedup --semantic`)
36
+
37
+ `soup data dedup` removes near-duplicates with MinHash by default — fast, no
38
+ torch, but **lexical**: it compares shared token shingles, so two rows that say
39
+ the same thing in different words look unrelated to it.
40
+
41
+ `--semantic` compares embedding cosine instead:
42
+
43
+ ```bash
44
+ soup data dedup train.jsonl --semantic -o clean.jsonl
45
+ soup data dedup train.jsonl --semantic --threshold 0.85 --field text -o clean.jsonl
46
+ soup data dedup train.jsonl --semantic --embed-model sentence-transformers/all-mpnet-base-v2
47
+ ```
48
+
49
+ Requires the `[train]` extra (it reuses `transformers`; there is no new
50
+ dependency) and downloads a small embedding model on first use. Plain MinHash
51
+ `dedup` stays on the light core.
52
+
53
+ **What it buys you.** Measured against MinHash on the same rows
54
+ (all-MiniLM-L6-v2):
55
+
56
+ | pair | cosine | MinHash | `--semantic` |
57
+ |---|---|---|---|
58
+ | exact duplicate | 1.000 | caught | caught |
59
+ | "sorts **a list** of integers" / "sorts **an array** of integers" | 0.908 | **missed** | caught |
60
+ | "which sorts a list of **ints**" (reworded) | 0.880 | **missed** | caught |
61
+ | "Add two numbers" / "Multiply two numbers" | 0.759 | kept | kept (correct) |
62
+
63
+ So `--semantic` catches **rewordings** MinHash's shingling scores as distinct.
64
+
65
+ ### It is not a paraphrase detector — and why the default is 0.8
66
+
67
+ Heavier paraphrases are **not** reliably separable. Measured, paraphrase cosines
68
+ (0.49–0.76) *overlap* with genuinely-distinct rows (0.54–0.76):
69
+
70
+ - "reverse a string" / "invert the order of characters" — a **true paraphrase** — scores **0.491**
71
+ - "Add two numbers" / "Multiply two numbers" — **two rows you must keep** — scores **0.759**
72
+
73
+ A real paraphrase can score *lower* than two rows that must both survive, so **no
74
+ threshold cleanly separates them**. Lowering `--threshold` to chase paraphrase
75
+ recall deletes real training rows — silent data loss, which is worse than keeping
76
+ a duplicate. The 0.8 default is deliberately conservative. Raise or lower it only
77
+ against your own data, and check what got dropped.
78
+
79
+ `--threshold` means Jaccard for MinHash and cosine for `--semantic`. They are
80
+ different scales; a value tuned for one is not meaningful for the other.
81
+
82
+ ## Topic map (`soup data topics`)
83
+
84
+ See what you are actually training on:
85
+
86
+ ```bash
87
+ soup data topics train.jsonl # 'auto' picks the cluster count
88
+ soup data topics train.jsonl --clusters 8 -o topics.json
89
+ ```
90
+
91
+ Embeds every row, clusters with k-means, and labels each cluster with c-TF-IDF
92
+ terms — terms frequent in *that* cluster and rare elsewhere, so filler words like
93
+ "the" never become a label. Prints a coverage table plus a warning for any topic
94
+ under 2% of the data:
95
+
96
+ ```
97
+ Topic map — 4200 rows, 6 clusters
98
+ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━┓
99
+ ┃ Topic ┃ Rows ┃ Coverage ┃
100
+ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━┩
101
+ │ function / python / code │ 3444 │ 82.0% │
102
+ │ theorem / proof / math │ 252 │ 6.0% │
103
+ │ refuse / harmful / safe │ 42 │ 1.0% │
104
+ └──────────────────────────┴──────┴──────────┘
105
+ topic 'refuse / harmful / safe' is thin: 1.0% of rows (42/4200)
106
+ ```
107
+
108
+ Labels are **emergent term clusters**, not a classification against a fixed
109
+ taxonomy: "82% code" means 82% of rows landed in a cluster whose top terms look
110
+ like code. Requires `[train]`.
111
+
112
+ ## Canaries (`soup data canary insert|check`)
113
+
114
+ Prove whether a model memorized your data — for leak detection and provenance.
115
+
116
+ ```bash
117
+ # 1. insert K unique secrets (keep the manifest OUT of your repo)
118
+ soup data canary insert train.jsonl -o canaried.jsonl --count 16 --manifest secrets.json
119
+
120
+ # 2. train on canaried.jsonl as usual, then:
121
+ soup data canary check --manifest secrets.json --base ./my-model --adapter ./lora
122
+ ```
123
+
124
+ `check` measures the model's loss on each inserted secret and ranks it against
125
+ never-inserted **controls** drawn from the same secret space and sharing the same
126
+ carrier prompt — so a low loss means the *secret* is unusually likely, not the
127
+ prompt. Exit **2** on MAJOR, so CI can gate on a leak.
128
+
129
+ This is loss-vs-controls (Carlini et al., *The Secret Sharer*), not "ask the model
130
+ and see if it says the secret": a model can memorize a canary and still not emit
131
+ it under greedy decoding, so "nothing came back" would be false reassurance.
132
+
133
+ The verdict asks whether **more** canaries look memorized than chance explains
134
+ (binomial tail, α=0.05) rather than whether any single one dipped low — with 16
135
+ canaries, an "any single one" rule fires on a **clean** model about 15% of the
136
+ time, which would make a CI gate useless.
137
+
138
+ Measured on SmolLM2-135M:
139
+
140
+ | model | loss | percentiles | verdict |
141
+ |---|---|---|---|
142
+ | trained on the canaries | 1.7–2.5 | all 0.0% | **MAJOR** (exit 2) |
143
+ | never saw them | 4.1–6.2 | 1.6%–93% | OK (exit 0) |
144
+
145
+ **The manifest is the sensitive artifact**, not the dataset: anyone holding it can
146
+ reproduce the secrets. It is written `0600` on POSIX and must not be committed
147
+ alongside the data it protects. `check --output` embeds the same secrets.
148
+
149
+ Exposure is a **sampled-control approximation**, not full-space rank enumeration —
150
+ "no exposure" is not proof of no memorization.
151
+
152
+ ---
153
+
32
154
  ## Data Engineering Pro
33
155
 
34
156
  The v0.69.0 release ships 5 surfaces that turn dataset prep from "throw a JSONL at the trainer" into a first-class engineering workflow.
@@ -248,7 +248,7 @@ configs where expert FFNs need lower rank than attention. Caps: 256 keys × valu
248
248
  `lora_dropout` strip) auto-fire when the model name and architecture match. Both are
249
249
  gated and silent on unrelated models.
250
250
 
251
- **Template registry** — the 16 built-in templates now live as
251
+ **Template registry** — the 21 built-in templates now live as
252
252
  `src/soup_cli/templates/*.yaml` with a `manifest.json` index. `soup init --template <name>`
253
253
  reads the YAML; the inline copies in `schema.py` stay as a back-compat fallback,
254
254
  deprecated in favour of the YAML registry.
@@ -63,6 +63,35 @@ soup export --model ./output --format gguf --llama-cpp /path/to/llama.cpp
63
63
 
64
64
  Supported quantizations: `q4_0`, `q4_k_m`, `q5_k_m`, `q8_0`, `f16`, `f32`
65
65
 
66
+ ### Building llama.cpp (required for quantized GGUF)
67
+
68
+ Soup auto-clones llama.cpp (pinned tag `b5270`) to `~/.soup/llama.cpp` on first use,
69
+ but it does **not** build it. The conversion step (`f16` / `f32`) works from the
70
+ Python script alone; every *quantized* type additionally needs the `llama-quantize`
71
+ binary, so build it once:
72
+
73
+ ```bash
74
+ cd ~/.soup/llama.cpp
75
+ cmake -B build -DGGML_NATIVE=OFF -DLLAMA_CURL=OFF -DCMAKE_BUILD_TYPE=Release
76
+ cmake --build build --config Release --target llama-quantize -j 4
77
+ ```
78
+
79
+ Soup finds the binary in both single-config (`build/bin/llama-quantize`, Make/Ninja)
80
+ and multi-config (`build/bin/Release/llama-quantize.exe`, MSVC/Xcode) layouts, or on
81
+ `PATH`. Point at an existing checkout with `--llama-cpp /path/to/llama.cpp` or the
82
+ `LLAMA_CPP_PATH` env var.
83
+
84
+ **Toolchain validated on Windows** (all six quants, then `soup deploy ollama` →
85
+ inference): Visual Studio 2022 Build Tools with the *Desktop development with C++*
86
+ workload (`Microsoft.VisualStudio.Component.VC.Tools.x86.x64`) + CMake ≥ 3.14, CPU-only.
87
+ Linux/macOS need only a C++ toolchain + CMake. CUDA llama.cpp builds are untested
88
+ (see [#144](https://github.com/MakazhanAlpamys/Soup/issues/144)).
89
+
90
+ > Do **not** run `pip install -r ~/.soup/llama.cpp/requirements.txt` — it pins
91
+ > `torch~=2.2.1` against the CPU wheel index and will downgrade a CUDA PyTorch,
92
+ > breaking training. Soup deliberately installs only the convert script's extra
93
+ > dependencies (`gguf`, `sentencepiece`, `protobuf`), unpinned.
94
+
66
95
  ### ONNX Export
67
96
 
68
97
  Export models to ONNX format for use with [ONNX Runtime](https://onnxruntime.ai/):
@@ -6,6 +6,7 @@
6
6
 
7
7
  **Contents:**
8
8
 
9
+ - [Continual-learning rehearsal (`--replay`)](#continual-learning-rehearsal---replay)
9
10
  - [Loop Hardening](#loop-hardening)
10
11
  - [Unlearning (`task='unlearn'`, NPO / SimNPO / RMU)](#unlearning-taskunlearn-npo--simnpo--rmu)
11
12
  - [Continued Pre-training](#continued-pre-training)
@@ -41,6 +42,59 @@
41
42
 
42
43
  ---
43
44
 
45
+ ## Continual-learning rehearsal (`--replay`)
46
+
47
+ Fine-tuning on a new task can erase the old one. Rehearsal is the standard
48
+ defence: mix a slice of the old data back in.
49
+
50
+ ```bash
51
+ soup train --config new_task.yaml --replay old_task.jsonl --replay-ratio 0.1
52
+ ```
53
+
54
+ or in `soup.yaml`:
55
+
56
+ ```yaml
57
+ data:
58
+ train: new_task.jsonl
59
+ replay: old_task.jsonl
60
+ replay_ratio: 0.1 # fraction of the FINAL mixed set
61
+ replay_seed: 0
62
+ ```
63
+
64
+ **The ratio is a share of the final set**, not of the new data:
65
+ `n_replay = round(r/(1-r) · n_new)`. At `0.1` over 1000 new rows that is 111
66
+ replay rows → 1111 total → exactly 10%. The console reports what it did:
67
+
68
+ ```
69
+ Replay: +26 old rows interleaved (30.2% of 86)
70
+ ```
71
+
72
+ Three guarantees worth knowing:
73
+
74
+ - **Interleaved, never appended.** A trailing block of old rows would mean the
75
+ model sees them all in the final steps — a second mini-finetune, which is the
76
+ failure rehearsal exists to prevent.
77
+ - **`train` only; validation stays pure new-task**, so your eval still measures
78
+ the task you are learning. Measure old-task retention separately with
79
+ `soup eval custom` / `soup ship`.
80
+ - **An undersized pool reports a shortfall rather than repeating rows** — a row
81
+ seen twice per epoch is a different experiment.
82
+
83
+ The replay file gets its own format detection, so the old set may be alpaca while
84
+ the new one is sharegpt.
85
+
86
+ **Scope (v1):** `sft` and `pretrain` only, and incompatible with
87
+ `packing`/`multipack` — those concatenate rows into fixed blocks, so the ratio
88
+ stops being meaningful at block boundaries. Both are rejected with a clear error
89
+ rather than silently mis-mixing.
90
+
91
+ **Honest result.** Validated at proof-of-mechanism scale (SmolLM2-135M + LoRA):
92
+ training task B from a model that knew task A, replay retained A **7% better than
93
+ a no-replay control** (loss 0.565 → 0.526) at a ~5% cost to task B — the expected
94
+ trade. But forgetting without replay was only **+4%**, i.e. mild: LoRA on a 135M
95
+ model barely drifts. The direction and the mechanism are proven; the effect size
96
+ at full fine-tuning or 7B+ is unproven on a 4 GB box.
97
+
44
98
  ## Loop Hardening
45
99
 
46
100
  Six surfaces protect the training loop from the failure modes that cost a real GPU-hour. The schema + math kernels shipped in v0.70.0; the live trainer-callback wiring shipped in **v0.71.11**, validated end-to-end on SmolLM2-135M.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "soup-cli"
7
- version = "0.71.35"
7
+ version = "0.71.36"
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.35"
3
+ __version__ = "0.71.36"
@@ -521,6 +521,15 @@ from soup_cli.commands import data_doctor as _data_doctor_cmd # noqa: E402
521
521
  data.app.command(name="doctor")(_data_doctor_cmd.doctor)
522
522
  data.app.command(name="lint")(_data_doctor_cmd.lint)
523
523
 
524
+ # v0.71.36 — Data Moat II: topic map + Secret-Sharer canaries.
525
+ from soup_cli.commands import data_topics as _data_topics_cmd # noqa: E402
526
+
527
+ data.app.command(name="topics")(_data_topics_cmd.topics)
528
+
529
+ from soup_cli.commands import data_canary as _data_canary_cmd # noqa: E402
530
+
531
+ data.app.add_typer(_data_canary_cmd.app, name="canary")
532
+
524
533
  # v0.71.28 — MCP server: drive Soup from any MCP client (Claude Code / Cursor /
525
534
  # Cline / Continue) over stdio.
526
535
  from soup_cli.commands import mcp as _mcp_cmd # noqa: E402