soup-cli 0.71.33__tar.gz → 0.71.34__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 (874) hide show
  1. {soup_cli-0.71.33 → soup_cli-0.71.34}/CHANGELOG.md +21 -0
  2. {soup_cli-0.71.33 → soup_cli-0.71.34}/CONTRIBUTING.md +1 -1
  3. {soup_cli-0.71.33 → soup_cli-0.71.34}/PKG-INFO +27 -34
  4. {soup_cli-0.71.33 → soup_cli-0.71.34}/README.md +26 -33
  5. {soup_cli-0.71.33 → soup_cli-0.71.34}/docs/README.md +1 -1
  6. {soup_cli-0.71.33 → soup_cli-0.71.34}/docs/adapters-and-governance.md +8 -0
  7. {soup_cli-0.71.33 → soup_cli-0.71.34}/docs/commands.md +2 -0
  8. {soup_cli-0.71.33 → soup_cli-0.71.34}/docs/peft-and-efficiency.md +19 -0
  9. {soup_cli-0.71.33 → soup_cli-0.71.34}/pyproject.toml +1 -1
  10. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/__init__.py +1 -1
  11. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/adapters.py +225 -0
  12. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/config/schema.py +135 -0
  13. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/sft.py +18 -0
  14. soup_cli-0.71.34/src/soup_cli/utils/adapter_arithmetic.py +288 -0
  15. soup_cli-0.71.34/src/soup_cli/utils/lisa.py +213 -0
  16. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/peft_wiring.py +26 -0
  17. soup_cli-0.71.34/tests/test_v07134.py +1041 -0
  18. {soup_cli-0.71.33 → soup_cli-0.71.34}/.dockerignore +0 -0
  19. {soup_cli-0.71.33 → soup_cli-0.71.34}/.github/FUNDING.yml +0 -0
  20. {soup_cli-0.71.33 → soup_cli-0.71.34}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  21. {soup_cli-0.71.33 → soup_cli-0.71.34}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  22. {soup_cli-0.71.33 → soup_cli-0.71.34}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  23. {soup_cli-0.71.33 → soup_cli-0.71.34}/.github/pull_request_template.md +0 -0
  24. {soup_cli-0.71.33 → soup_cli-0.71.34}/.github/workflows/ci.yml +0 -0
  25. {soup_cli-0.71.33 → soup_cli-0.71.34}/.github/workflows/docker.yml +0 -0
  26. {soup_cli-0.71.33 → soup_cli-0.71.34}/.github/workflows/publish.yml +0 -0
  27. {soup_cli-0.71.33 → soup_cli-0.71.34}/.github/workflows/recipe-validation.yml +0 -0
  28. {soup_cli-0.71.33 → soup_cli-0.71.34}/.gitignore +0 -0
  29. {soup_cli-0.71.33 → soup_cli-0.71.34}/.mailmap +0 -0
  30. {soup_cli-0.71.33 → soup_cli-0.71.34}/.pre-commit-config.yaml +0 -0
  31. {soup_cli-0.71.33 → soup_cli-0.71.34}/AGENTS.md +0 -0
  32. {soup_cli-0.71.33 → soup_cli-0.71.34}/CODEOWNERS +0 -0
  33. {soup_cli-0.71.33 → soup_cli-0.71.34}/CODE_OF_CONDUCT.md +0 -0
  34. {soup_cli-0.71.33 → soup_cli-0.71.34}/CONTRIBUTORS.md +0 -0
  35. {soup_cli-0.71.33 → soup_cli-0.71.34}/Dockerfile +0 -0
  36. {soup_cli-0.71.33 → soup_cli-0.71.34}/LICENSE +0 -0
  37. {soup_cli-0.71.33 → soup_cli-0.71.34}/NOTICE +0 -0
  38. {soup_cli-0.71.33 → soup_cli-0.71.34}/SECURITY.md +0 -0
  39. {soup_cli-0.71.33 → soup_cli-0.71.34}/docker-compose.yml +0 -0
  40. {soup_cli-0.71.33 → soup_cli-0.71.34}/docs/backends-and-ops.md +0 -0
  41. {soup_cli-0.71.33 → soup_cli-0.71.34}/docs/data.md +0 -0
  42. {soup_cli-0.71.33 → soup_cli-0.71.34}/docs/evaluation.md +0 -0
  43. {soup_cli-0.71.33 → soup_cli-0.71.34}/docs/models.md +0 -0
  44. {soup_cli-0.71.33 → soup_cli-0.71.34}/docs/performance-and-quantization.md +0 -0
  45. {soup_cli-0.71.33 → soup_cli-0.71.34}/docs/serving-and-export.md +0 -0
  46. {soup_cli-0.71.33 → soup_cli-0.71.34}/docs/training.md +0 -0
  47. {soup_cli-0.71.33 → soup_cli-0.71.34}/examples/README.md +0 -0
  48. {soup_cli-0.71.33 → soup_cli-0.71.34}/examples/configs/dpo_chat.yaml +0 -0
  49. {soup_cli-0.71.33 → soup_cli-0.71.34}/examples/configs/dpo_example.yaml +0 -0
  50. {soup_cli-0.71.33 → soup_cli-0.71.34}/examples/configs/grpo_reasoning.yaml +0 -0
  51. {soup_cli-0.71.33 → soup_cli-0.71.34}/examples/configs/rlhf_step1_sft.yaml +0 -0
  52. {soup_cli-0.71.33 → soup_cli-0.71.34}/examples/configs/rlhf_step2_reward.yaml +0 -0
  53. {soup_cli-0.71.33 → soup_cli-0.71.34}/examples/configs/rlhf_step3_ppo.yaml +0 -0
  54. {soup_cli-0.71.33 → soup_cli-0.71.34}/examples/configs/sft_basic.yaml +0 -0
  55. {soup_cli-0.71.33 → soup_cli-0.71.34}/examples/configs/vision_llama.yaml +0 -0
  56. {soup_cli-0.71.33 → soup_cli-0.71.34}/examples/data/alpaca_tiny.jsonl +0 -0
  57. {soup_cli-0.71.33 → soup_cli-0.71.34}/examples/data/chat_preferences.jsonl +0 -0
  58. {soup_cli-0.71.33 → soup_cli-0.71.34}/examples/data/dpo_sample.jsonl +0 -0
  59. {soup_cli-0.71.33 → soup_cli-0.71.34}/examples/data/reasoning_math.jsonl +0 -0
  60. {soup_cli-0.71.33 → soup_cli-0.71.34}/examples/reward_hacking/rewards.py +0 -0
  61. {soup_cli-0.71.33 → soup_cli-0.71.34}/examples/synthetic_workflow.md +0 -0
  62. {soup_cli-0.71.33 → soup_cli-0.71.34}/examples/synthetic_workflow.yaml +0 -0
  63. {soup_cli-0.71.33 → soup_cli-0.71.34}/soup.png +0 -0
  64. {soup_cli-0.71.33 → soup_cli-0.71.34}/soup_logo_svg.svg +0 -0
  65. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/__main__.py +0 -0
  66. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/autopilot/__init__.py +0 -0
  67. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/autopilot/analyzer.py +0 -0
  68. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/autopilot/decisions.py +0 -0
  69. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/autopilot/generate_config.py +0 -0
  70. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/cans/__init__.py +0 -0
  71. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/cans/pack.py +0 -0
  72. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/cans/publish.py +0 -0
  73. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/cans/run.py +0 -0
  74. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/cans/schema.py +0 -0
  75. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/cans/unpack.py +0 -0
  76. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/cans/verify.py +0 -0
  77. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/cli.py +0 -0
  78. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/cloud/__init__.py +0 -0
  79. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/cloud/modal.py +0 -0
  80. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/__init__.py +0 -0
  81. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/_eval_v0550.py +0 -0
  82. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/_eval_v0610.py +0 -0
  83. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/_eval_v0650.py +0 -0
  84. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/_eval_v07110.py +0 -0
  85. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/_webhook_cli.py +0 -0
  86. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/ab.py +0 -0
  87. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/active_sample.py +0 -0
  88. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/advise.py +0 -0
  89. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/agent.py +0 -0
  90. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/airgap.py +0 -0
  91. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/apple_adapter.py +0 -0
  92. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/attest.py +0 -0
  93. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/audit_log.py +0 -0
  94. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/autopilot.py +0 -0
  95. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/bench.py +0 -0
  96. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/bom.py +0 -0
  97. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/build.py +0 -0
  98. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/can.py +0 -0
  99. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/chat.py +0 -0
  100. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/compile_cmd.py +0 -0
  101. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/compile_tools.py +0 -0
  102. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/completions.py +0 -0
  103. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/cost.py +0 -0
  104. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/data.py +0 -0
  105. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/data_doctor.py +0 -0
  106. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/data_forge.py +0 -0
  107. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/data_mix.py +0 -0
  108. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/data_score.py +0 -0
  109. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/delinearize_llama4.py +0 -0
  110. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/deploy.py +0 -0
  111. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/diagnose.py +0 -0
  112. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/diff.py +0 -0
  113. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/distill_prompt.py +0 -0
  114. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/doctor.py +0 -0
  115. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/draft.py +0 -0
  116. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/drift_alarm.py +0 -0
  117. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/edit.py +0 -0
  118. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/env.py +0 -0
  119. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/eval.py +0 -0
  120. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/expect.py +0 -0
  121. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/export.py +0 -0
  122. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/fetch.py +0 -0
  123. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/generate.py +0 -0
  124. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/history.py +0 -0
  125. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/infer.py +0 -0
  126. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/ingest.py +0 -0
  127. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/init.py +0 -0
  128. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/iterative_dpo.py +0 -0
  129. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/license_advisor.py +0 -0
  130. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/llama.py +0 -0
  131. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/local_rl.py +0 -0
  132. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/lock.py +0 -0
  133. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/loop.py +0 -0
  134. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/mcp.py +0 -0
  135. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/merge.py +0 -0
  136. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
  137. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/migrate.py +0 -0
  138. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/monitor.py +0 -0
  139. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/plan.py +0 -0
  140. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/plugins.py +0 -0
  141. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/probe.py +0 -0
  142. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/profile.py +0 -0
  143. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/prune_prompt.py +0 -0
  144. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/push.py +0 -0
  145. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/quantize.py +0 -0
  146. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/quickstart.py +0 -0
  147. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/ra_dit.py +0 -0
  148. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/recipes.py +0 -0
  149. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/registry.py +0 -0
  150. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/runs.py +0 -0
  151. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/serve.py +0 -0
  152. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/ship.py +0 -0
  153. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/shrink.py +0 -0
  154. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/spectrum.py +0 -0
  155. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/steer.py +0 -0
  156. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/sweep.py +0 -0
  157. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/tokenizer.py +0 -0
  158. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/train.py +0 -0
  159. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/tui.py +0 -0
  160. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/tunability.py +0 -0
  161. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/ui.py +0 -0
  162. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/commands/why.py +0 -0
  163. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/config/__init__.py +0 -0
  164. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/config/loader.py +0 -0
  165. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/__init__.py +0 -0
  166. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
  167. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
  168. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
  169. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
  170. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
  171. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
  172. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
  173. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
  174. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
  175. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
  176. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
  177. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
  178. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/augment.py +0 -0
  179. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/chat_templates.py +0 -0
  180. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/collators.py +0 -0
  181. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/formats.py +0 -0
  182. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/loader.py +0 -0
  183. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/loss_mask.py +0 -0
  184. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/providers/__init__.py +0 -0
  185. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/providers/_utils.py +0 -0
  186. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/providers/anthropic.py +0 -0
  187. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/providers/ollama.py +0 -0
  188. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/providers/vllm.py +0 -0
  189. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/sft_format.py +0 -0
  190. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/templates/__init__.py +0 -0
  191. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/templates/code.py +0 -0
  192. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/templates/conversation.py +0 -0
  193. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/templates/preference.py +0 -0
  194. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/templates/qa.py +0 -0
  195. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/templates/reasoning.py +0 -0
  196. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/templates/tool_calling.py +0 -0
  197. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/templates/verifiable.py +0 -0
  198. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/traces/__init__.py +0 -0
  199. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/traces/pair_builder.py +0 -0
  200. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/traces/parsers.py +0 -0
  201. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/traces/quality.py +0 -0
  202. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/data/validator.py +0 -0
  203. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/envs/__init__.py +0 -0
  204. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/envs/_common.py +0 -0
  205. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/envs/calculator.py +0 -0
  206. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/envs/guess_number.py +0 -0
  207. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/envs/retrieval_qa.py +0 -0
  208. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/eval/__init__.py +0 -0
  209. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/eval/arena.py +0 -0
  210. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
  211. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/eval/calibrate.py +0 -0
  212. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
  213. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/eval/custom.py +0 -0
  214. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/eval/forgetting.py +0 -0
  215. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/eval/gate.py +0 -0
  216. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/eval/human.py +0 -0
  217. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/eval/judge.py +0 -0
  218. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/eval/leaderboard.py +0 -0
  219. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/eval/quant_check.py +0 -0
  220. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/experiment/__init__.py +0 -0
  221. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/experiment/tracker.py +0 -0
  222. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/mcp_server/__init__.py +0 -0
  223. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/mcp_server/registry.py +0 -0
  224. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/mcp_server/server.py +0 -0
  225. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/migrate/__init__.py +0 -0
  226. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/migrate/axolotl.py +0 -0
  227. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/migrate/common.py +0 -0
  228. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/migrate/llamafactory.py +0 -0
  229. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/migrate/unsloth.py +0 -0
  230. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/monitoring/__init__.py +0 -0
  231. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/monitoring/callback.py +0 -0
  232. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
  233. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/monitoring/display.py +0 -0
  234. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
  235. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/monitoring/hf_push.py +0 -0
  236. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/monitoring/plugin_callback.py +0 -0
  237. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/monitoring/trace_logger.py +0 -0
  238. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/plugins/__init__.py +0 -0
  239. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/py.typed +0 -0
  240. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/recipes/__init__.py +0 -0
  241. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/recipes/catalog.py +0 -0
  242. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/registry/__init__.py +0 -0
  243. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/registry/attach.py +0 -0
  244. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/registry/diff.py +0 -0
  245. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/registry/hashing.py +0 -0
  246. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/registry/store.py +0 -0
  247. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/__init__.py +0 -0
  248. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/audio.yaml +0 -0
  249. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/bco.yaml +0 -0
  250. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/chat.yaml +0 -0
  251. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/code.yaml +0 -0
  252. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/embedding.yaml +0 -0
  253. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
  254. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
  255. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
  256. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/ipo.yaml +0 -0
  257. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/kto.yaml +0 -0
  258. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/longcontext.yaml +0 -0
  259. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/manifest.json +0 -0
  260. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/medical.yaml +0 -0
  261. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/moe.yaml +0 -0
  262. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/orpo.yaml +0 -0
  263. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/pretrain.yaml +0 -0
  264. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/reasoning.yaml +0 -0
  265. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/rlhf.yaml +0 -0
  266. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/simpo.yaml +0 -0
  267. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/tool-calling.yaml +0 -0
  268. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/templates/vision.yaml +0 -0
  269. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/__init__.py +0 -0
  270. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/asr.py +0 -0
  271. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/bco.py +0 -0
  272. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/bitnet.py +0 -0
  273. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/classifier.py +0 -0
  274. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/distill.py +0 -0
  275. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/dpo.py +0 -0
  276. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/embedding.py +0 -0
  277. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/grpo.py +0 -0
  278. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/ipo.py +0 -0
  279. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/kto.py +0 -0
  280. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/mlx_dpo.py +0 -0
  281. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/mlx_grpo.py +0 -0
  282. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/mlx_routing.py +0 -0
  283. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/mlx_sft.py +0 -0
  284. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/mole_routing.py +0 -0
  285. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/online_dpo.py +0 -0
  286. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/orpo.py +0 -0
  287. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/ppo.py +0 -0
  288. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/preference.py +0 -0
  289. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/pretrain.py +0 -0
  290. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/prm.py +0 -0
  291. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/raft.py +0 -0
  292. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/reward_model.py +0 -0
  293. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/rewards.py +0 -0
  294. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/simpo.py +0 -0
  295. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/tts.py +0 -0
  296. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/trainer/unlearn.py +0 -0
  297. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/tui_app.py +0 -0
  298. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/ui/__init__.py +0 -0
  299. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/ui/app.py +0 -0
  300. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/ui/plugins/__init__.py +0 -0
  301. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/ui/static/app.js +0 -0
  302. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/ui/static/index.html +0 -0
  303. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/ui/static/logo.png +0 -0
  304. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/ui/static/logo.svg +0 -0
  305. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/ui/static/style.css +0 -0
  306. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/__init__.py +0 -0
  307. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/_eval_text.py +0 -0
  308. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/ab_test.py +0 -0
  309. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/activation_offload.py +0 -0
  310. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/active_sampler.py +0 -0
  311. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/adapter_bisect.py +0 -0
  312. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/adapter_branch.py +0 -0
  313. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/adapter_diff.py +0 -0
  314. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/adapter_fuse.py +0 -0
  315. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/adapter_merge.py +0 -0
  316. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/adapter_pr.py +0 -0
  317. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/adapter_scan.py +0 -0
  318. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/adapter_sign.py +0 -0
  319. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/advanced_precision.py +0 -0
  320. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/advise.py +0 -0
  321. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/advise_history.py +0 -0
  322. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/agent_forge.py +0 -0
  323. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/agent_rollout.py +0 -0
  324. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/agent_sandbox.py +0 -0
  325. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/airgap_bundle.py +0 -0
  326. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/annex_xi.py +0 -0
  327. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/anthropic_messages.py +0 -0
  328. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/apple_adapter.py +0 -0
  329. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/asr_metrics.py +0 -0
  330. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/attest.py +0 -0
  331. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/audit_log.py +0 -0
  332. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/auto_quant.py +0 -0
  333. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/backend_detect.py +0 -0
  334. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/batch_probe.py +0 -0
  335. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/behavior_battery.py +0 -0
  336. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/best_of_n.py +0 -0
  337. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/bitnet.py +0 -0
  338. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/blame.py +0 -0
  339. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/block_expansion.py +0 -0
  340. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/bom.py +0 -0
  341. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/brain_rot.py +0 -0
  342. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/brain_rot_lang.py +0 -0
  343. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/build_dag.py +0 -0
  344. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/canary_discovery.py +0 -0
  345. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/canary_router.py +0 -0
  346. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/capability_suite.py +0 -0
  347. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/checklist_dsl.py +0 -0
  348. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
  349. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/citation_faithful.py +0 -0
  350. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/classifier.py +0 -0
  351. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/cmaes_merge.py +0 -0
  352. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/compile_tools.py +0 -0
  353. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/completions.py +0 -0
  354. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/constants.py +0 -0
  355. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/convergence.py +0 -0
  356. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/crash.py +0 -0
  357. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/cross_doc_attn.py +0 -0
  358. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/curriculum.py +0 -0
  359. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
  360. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/cut_ce.py +0 -0
  361. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/data_doctor.py +0 -0
  362. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/data_forge.py +0 -0
  363. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/data_lint.py +0 -0
  364. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/data_mix.py +0 -0
  365. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/data_pipeline.py +0 -0
  366. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/data_score.py +0 -0
  367. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/deepspeed.py +0 -0
  368. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/delinearize_llama4.py +0 -0
  369. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/demo_bundles.py +0 -0
  370. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/deploy_autopilot.py +0 -0
  371. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/deploy_measure.py +0 -0
  372. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/__init__.py +0 -0
  373. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/_common.py +0 -0
  374. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/badge.py +0 -0
  375. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/citation.py +0 -0
  376. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/contamination.py +0 -0
  377. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
  378. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/format.py +0 -0
  379. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/live.py +0 -0
  380. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/memorization.py +0 -0
  381. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
  382. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/refusal.py +0 -0
  383. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/report.py +0 -0
  384. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/runner.py +0 -0
  385. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/distill.py +0 -0
  386. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/dpo_variants.py +0 -0
  387. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/draft.py +0 -0
  388. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/drift_alarm.py +0 -0
  389. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/ebft_gdpo.py +0 -0
  390. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/echo_trap.py +0 -0
  391. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/edit_diff.py +0 -0
  392. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/edit_governor.py +0 -0
  393. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/edit_kernels.py +0 -0
  394. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/encoding.py +0 -0
  395. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/energy.py +0 -0
  396. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/env_lock.py +0 -0
  397. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/errors.py +0 -0
  398. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/eval_design.py +0 -0
  399. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/eval_gate_hook.py +0 -0
  400. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
  401. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/evolve.py +0 -0
  402. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/expectations.py +0 -0
  403. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/fetch_examples.py +0 -0
  404. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/flash_attn.py +0 -0
  405. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/fp8.py +0 -0
  406. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/freeze.py +0 -0
  407. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/fsdp.py +0 -0
  408. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
  409. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/galore.py +0 -0
  410. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/gguf_quant.py +0 -0
  411. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/gpu.py +0 -0
  412. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/gpu_monitor.py +0 -0
  413. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/grace_codebook.py +0 -0
  414. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/graceful_save.py +0 -0
  415. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/grad_accum.py +0 -0
  416. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/gradient_ckpt.py +0 -0
  417. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/grpo_long_context.py +0 -0
  418. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/grpo_variants.py +0 -0
  419. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/hardware_fit.py +0 -0
  420. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/harm_probe.py +0 -0
  421. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/hf.py +0 -0
  422. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/hf_space.py +0 -0
  423. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/hubs.py +0 -0
  424. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/ingest_sources.py +0 -0
  425. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/integrations.py +0 -0
  426. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/interference.py +0 -0
  427. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/interference_live.py +0 -0
  428. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/irt.py +0 -0
  429. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/iterative_dpo.py +0 -0
  430. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/jinja_analyzer.py +0 -0
  431. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/kernel_picker.py +0 -0
  432. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/knowledge_edit.py +0 -0
  433. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/kv_cache.py +0 -0
  434. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/launcher.py +0 -0
  435. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/license_advisor.py +0 -0
  436. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/license_matrix.py +0 -0
  437. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/liger.py +0 -0
  438. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/live_eval.py +0 -0
  439. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/llama_proxy.py +0 -0
  440. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/llama_server_timings.py +0 -0
  441. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/local_rl.py +0 -0
  442. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
  443. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/loftq_init.py +0 -0
  444. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/log_level.py +0 -0
  445. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/long_context.py +0 -0
  446. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/longlora.py +0 -0
  447. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/loop_budget.py +0 -0
  448. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/loop_daemon.py +0 -0
  449. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/loop_iteration.py +0 -0
  450. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/loop_stages.py +0 -0
  451. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/loop_state.py +0 -0
  452. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/lr_finder.py +0 -0
  453. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/lr_groups.py +0 -0
  454. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/magpie.py +0 -0
  455. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/metrics.py +0 -0
  456. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/mii.py +0 -0
  457. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/minillm.py +0 -0
  458. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/mix_proxy.py +0 -0
  459. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/mixed_precision.py +0 -0
  460. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/mlx.py +0 -0
  461. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/mod.py +0 -0
  462. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/moe.py +0 -0
  463. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/moe_quant.py +0 -0
  464. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/mole_routing.py +0 -0
  465. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/multipack.py +0 -0
  466. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/multipack_sampler.py +0 -0
  467. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/multipack_trainer.py +0 -0
  468. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/namespace_pin.py +0 -0
  469. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/neat_packing.py +0 -0
  470. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/ngram_spec.py +0 -0
  471. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/nlg_metrics.py +0 -0
  472. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/ollama.py +0 -0
  473. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/onboarding.py +0 -0
  474. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/optimizer_zoo.py +0 -0
  475. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/paths.py +0 -0
  476. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/peft_builder.py +0 -0
  477. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/peft_patches.py +0 -0
  478. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/persona_hub.py +0 -0
  479. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/pipeline.py +0 -0
  480. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/preference_combine.py +0 -0
  481. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/prm.py +0 -0
  482. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/prm_reward.py +0 -0
  483. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/probe_kernel.py +0 -0
  484. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/probe_pack.py +0 -0
  485. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/profiler.py +0 -0
  486. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/profiling.py +0 -0
  487. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/profiling_v0_43.py +0 -0
  488. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/prompt_compile.py +0 -0
  489. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/prompt_distill.py +0 -0
  490. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/prune_prompt.py +0 -0
  491. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/qat.py +0 -0
  492. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/qr_url.py +0 -0
  493. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/quality.py +0 -0
  494. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/quant_menu.py +0 -0
  495. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/ra_dit.py +0 -0
  496. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/ra_dit_run.py +0 -0
  497. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/raft.py +0 -0
  498. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/reasoning_effort.py +0 -0
  499. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/reasoning_parser.py +0 -0
  500. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/recipe_dag.py +0 -0
  501. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/recipe_run.py +0 -0
  502. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/registry.py +0 -0
  503. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/relora.py +0 -0
  504. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/replay.py +0 -0
  505. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/repro_receipt.py +0 -0
  506. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/reward_hack_control.py +0 -0
  507. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/reward_hacking.py +0 -0
  508. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/ring_attention.py +0 -0
  509. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/rl_checkpoint.py +0 -0
  510. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
  511. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/run_cost.py +0 -0
  512. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/sae_diff.py +0 -0
  513. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/save_formats.py +0 -0
  514. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/server_tools.py +0 -0
  515. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/sglang.py +0 -0
  516. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/ship_verdict.py +0 -0
  517. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/shortcuts.py +0 -0
  518. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/shrink.py +0 -0
  519. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/signing.py +0 -0
  520. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/sleeper_probe.py +0 -0
  521. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/soup_lock.py +0 -0
  522. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/spec_pairing.py +0 -0
  523. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/spectrum_scan.py +0 -0
  524. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/spike_recovery.py +0 -0
  525. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/sse_train_stream.py +0 -0
  526. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/steering.py +0 -0
  527. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/strict_safetensors.py +0 -0
  528. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/structured_output.py +0 -0
  529. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/sweep_config.py +0 -0
  530. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/tail_latency.py +0 -0
  531. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/terraform_plan.py +0 -0
  532. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/tool_outputs.py +0 -0
  533. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/topology.py +0 -0
  534. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/tracing.py +0 -0
  535. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/trackers.py +0 -0
  536. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/train_event_buffer.py +0 -0
  537. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/trainer_plugins.py +0 -0
  538. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/trust_remote.py +0 -0
  539. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/truth_probe.py +0 -0
  540. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/tts.py +0 -0
  541. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/tts_codec.py +0 -0
  542. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/tunability.py +0 -0
  543. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/ui_env.py +0 -0
  544. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/uld.py +0 -0
  545. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/unlearn_kernels.py +0 -0
  546. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/unlearning.py +0 -0
  547. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/unlearning_eval.py +0 -0
  548. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/unsloth.py +0 -0
  549. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/v028_features.py +0 -0
  550. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/vector_bank.py +0 -0
  551. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/vllm.py +0 -0
  552. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/vscode_setup.py +0 -0
  553. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/warmup.py +0 -0
  554. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/webhooks.py +0 -0
  555. {soup_cli-0.71.33 → soup_cli-0.71.34}/src/soup_cli/utils/why.py +0 -0
  556. {soup_cli-0.71.33 → soup_cli-0.71.34}/templates/chat.yaml +0 -0
  557. {soup_cli-0.71.33 → soup_cli-0.71.34}/templates/code.yaml +0 -0
  558. {soup_cli-0.71.33 → soup_cli-0.71.34}/templates/medical.yaml +0 -0
  559. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/__init__.py +0 -0
  560. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/conftest.py +0 -0
  561. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/qa/v053_qa.md +0 -0
  562. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/qa/v07114_qa.md +0 -0
  563. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/qa/v0716_qa.md +0 -0
  564. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_adapters.py +0 -0
  565. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_advanced_peft.py +0 -0
  566. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_assistant_mask.py +0 -0
  567. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_audio.py +0 -0
  568. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_auto_tuning.py +0 -0
  569. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_autopilot.py +0 -0
  570. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_awq_gptq_export.py +0 -0
  571. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_batch_probe.py +0 -0
  572. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_bco.py +0 -0
  573. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_bench.py +0 -0
  574. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_brain_rot_multilingual.py +0 -0
  575. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_bugfixes.py +0 -0
  576. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_build_dag.py +0 -0
  577. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_callback.py +0 -0
  578. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_cans.py +0 -0
  579. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_chat.py +0 -0
  580. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_chat_template.py +0 -0
  581. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_cli.py +0 -0
  582. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_cli_subprocess.py +0 -0
  583. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_code_review_critical.py +0 -0
  584. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_code_review_deferred.py +0 -0
  585. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_code_review_high.py +0 -0
  586. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_code_review_medium_low.py +0 -0
  587. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_code_review_recurring.py +0 -0
  588. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_config.py +0 -0
  589. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_cost.py +0 -0
  590. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_crash_reporter.py +0 -0
  591. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_curriculum.py +0 -0
  592. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_data.py +0 -0
  593. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_data_augment.py +0 -0
  594. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_data_sample.py +0 -0
  595. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_data_split.py +0 -0
  596. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_data_tools.py +0 -0
  597. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_dataset_hub.py +0 -0
  598. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_dataset_registry.py +0 -0
  599. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_deepspeed.py +0 -0
  600. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_deploy_ollama.py +0 -0
  601. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_diff.py +0 -0
  602. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_display.py +0 -0
  603. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_doctor.py +0 -0
  604. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_dpo_example.py +0 -0
  605. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_dpo_variants.py +0 -0
  606. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_embedding.py +0 -0
  607. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_errors.py +0 -0
  608. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_eval.py +0 -0
  609. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_eval_gate.py +0 -0
  610. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_eval_platform.py +0 -0
  611. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_export.py +0 -0
  612. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_formats.py +0 -0
  613. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_fp8_recipe.py +0 -0
  614. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_freeze_training.py +0 -0
  615. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_generate.py +0 -0
  616. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_gpu.py +0 -0
  617. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_grpo.py +0 -0
  618. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_hf_integration.py +0 -0
  619. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_infer.py +0 -0
  620. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_inference_advanced.py +0 -0
  621. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_init.py +0 -0
  622. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_ipo.py +0 -0
  623. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_jinja_analyzer.py +0 -0
  624. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_kto.py +0 -0
  625. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_loader.py +0 -0
  626. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_log_level.py +0 -0
  627. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_loss_watchdog.py +0 -0
  628. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_merge.py +0 -0
  629. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_migrate.py +0 -0
  630. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_mlx_backend.py +0 -0
  631. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_moe.py +0 -0
  632. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_multi_adapter.py +0 -0
  633. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_multi_gpu.py +0 -0
  634. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_multipack_config.py +0 -0
  635. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_multipack_invariants.py +0 -0
  636. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_multipack_sampler.py +0 -0
  637. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_neat_packing.py +0 -0
  638. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_neftune_rslora.py +0 -0
  639. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_onnx_tensorrt_export.py +0 -0
  640. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_orpo.py +0 -0
  641. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_packing.py +0 -0
  642. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_part_a_wave1.py +0 -0
  643. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_part_a_wave2.py +0 -0
  644. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_part_b.py +0 -0
  645. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_part_c.py +0 -0
  646. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_part_d.py +0 -0
  647. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_part_e.py +0 -0
  648. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_part_f_hardening.py +0 -0
  649. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_peft_methods.py +0 -0
  650. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_peft_patches.py +0 -0
  651. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_performance.py +0 -0
  652. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_pissa_init.py +0 -0
  653. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_ppo.py +0 -0
  654. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_preference_dispatcher.py +0 -0
  655. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_preference_multi.py +0 -0
  656. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_preference_multi_runtime.py +0 -0
  657. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_pretrain.py +0 -0
  658. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_profile.py +0 -0
  659. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_profiling.py +0 -0
  660. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_progress.py +0 -0
  661. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_push.py +0 -0
  662. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_qat.py +0 -0
  663. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_quality_filter.py +0 -0
  664. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_quant_check.py +0 -0
  665. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_quant_menu.py +0 -0
  666. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_quickstart.py +0 -0
  667. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_rank_pattern.py +0 -0
  668. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_recipes.py +0 -0
  669. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_recipes_v031.py +0 -0
  670. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_refusal_multilingual.py +0 -0
  671. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_registry.py +0 -0
  672. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_relora.py +0 -0
  673. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_replay.py +0 -0
  674. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_resume.py +0 -0
  675. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_review_fixes_v07133.py +0 -0
  676. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_rlvr.py +0 -0
  677. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_run_cost.py +0 -0
  678. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_runs.py +0 -0
  679. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_serve.py +0 -0
  680. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_server_generate.py +0 -0
  681. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_sglang_serve.py +0 -0
  682. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_simpo.py +0 -0
  683. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_smoke_train.py +0 -0
  684. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_speculative_decoding.py +0 -0
  685. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_sweep.py +0 -0
  686. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_synth_data_pro.py +0 -0
  687. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_templates_yaml.py +0 -0
  688. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_tensorboard.py +0 -0
  689. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_tool_calling.py +0 -0
  690. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_trace_to_pref.py +0 -0
  691. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_tracker.py +0 -0
  692. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_trainer_coverage_v035.py +0 -0
  693. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_trainer_init.py +0 -0
  694. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_training_intelligence.py +0 -0
  695. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_training_speed.py +0 -0
  696. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_trust_remote_code.py +0 -0
  697. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_tui.py +0 -0
  698. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_ui.py +0 -0
  699. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_ui_chat.py +0 -0
  700. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_ui_config_builder.py +0 -0
  701. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_ui_live_monitor.py +0 -0
  702. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_ui_metrics.py +0 -0
  703. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_unsloth.py +0 -0
  704. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0401_part_c.py +0 -0
  705. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0401_part_d.py +0 -0
  706. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0401_part_e.py +0 -0
  707. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0402_part_a.py +0 -0
  708. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0402_part_b.py +0 -0
  709. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0403_part_a.py +0 -0
  710. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0403_part_b.py +0 -0
  711. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0403_part_c.py +0 -0
  712. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0404_part_a.py +0 -0
  713. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0404_part_b.py +0 -0
  714. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0405_part_a.py +0 -0
  715. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0406_part_a.py +0 -0
  716. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0410_part_a.py +0 -0
  717. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0410_part_b.py +0 -0
  718. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0410_part_c.py +0 -0
  719. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0420.py +0 -0
  720. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0430_part_a.py +0 -0
  721. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0430_part_b.py +0 -0
  722. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0430_part_c.py +0 -0
  723. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0430_part_d.py +0 -0
  724. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0440_part_a.py +0 -0
  725. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0440_part_b.py +0 -0
  726. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0440_part_c.py +0 -0
  727. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0440_part_d.py +0 -0
  728. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0440_review_followups.py +0 -0
  729. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0450.py +0 -0
  730. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0460_part_a.py +0 -0
  731. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0460_part_b.py +0 -0
  732. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0470_part_a.py +0 -0
  733. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0470_part_b.py +0 -0
  734. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0480_part_a.py +0 -0
  735. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0480_part_b.py +0 -0
  736. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0490.py +0 -0
  737. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0500_part_a.py +0 -0
  738. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0500_part_b.py +0 -0
  739. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0500_part_c.py +0 -0
  740. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0500_part_d.py +0 -0
  741. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0500_part_e.py +0 -0
  742. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0510.py +0 -0
  743. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0520.py +0 -0
  744. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0530.py +0 -0
  745. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v05310.py +0 -0
  746. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v05311.py +0 -0
  747. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0531_109.py +0 -0
  748. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0531_139.py +0 -0
  749. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0531_142.py +0 -0
  750. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0531_82.py +0 -0
  751. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0532.py +0 -0
  752. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0533.py +0 -0
  753. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0534.py +0 -0
  754. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0535.py +0 -0
  755. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0536.py +0 -0
  756. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0537.py +0 -0
  757. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0538.py +0 -0
  758. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0539.py +0 -0
  759. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0540.py +0 -0
  760. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0550.py +0 -0
  761. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0550_followups.py +0 -0
  762. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0560.py +0 -0
  763. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0570_part_a.py +0 -0
  764. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0570_part_b.py +0 -0
  765. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0570_part_c.py +0 -0
  766. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0570_part_d.py +0 -0
  767. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0580.py +0 -0
  768. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0590.py +0 -0
  769. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0600_part_a.py +0 -0
  770. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0600_part_b.py +0 -0
  771. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0600_part_c.py +0 -0
  772. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0600_part_d.py +0 -0
  773. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0600_part_e.py +0 -0
  774. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0600_part_f.py +0 -0
  775. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0610_part_a.py +0 -0
  776. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0610_part_b.py +0 -0
  777. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0610_part_c.py +0 -0
  778. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0610_part_d.py +0 -0
  779. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0610_part_e.py +0 -0
  780. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0620_followups.py +0 -0
  781. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0620_part_a.py +0 -0
  782. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0620_part_b.py +0 -0
  783. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0620_part_c.py +0 -0
  784. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0620_part_d.py +0 -0
  785. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0620_part_e.py +0 -0
  786. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0630_followups.py +0 -0
  787. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0630_part_a.py +0 -0
  788. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0630_part_b.py +0 -0
  789. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0630_part_c.py +0 -0
  790. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0630_part_d.py +0 -0
  791. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0630_part_e.py +0 -0
  792. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0631_206.py +0 -0
  793. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0640_followups.py +0 -0
  794. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0640_part_a.py +0 -0
  795. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0640_part_b.py +0 -0
  796. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0640_part_c.py +0 -0
  797. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0640_part_d.py +0 -0
  798. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0640_part_e.py +0 -0
  799. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0640_part_f.py +0 -0
  800. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0650_followups.py +0 -0
  801. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0650_part_a.py +0 -0
  802. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0650_part_b.py +0 -0
  803. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0650_part_c.py +0 -0
  804. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0650_part_d.py +0 -0
  805. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0650_part_e.py +0 -0
  806. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0660_cli.py +0 -0
  807. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0660_followups.py +0 -0
  808. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0660_part_a.py +0 -0
  809. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0660_part_b.py +0 -0
  810. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0660_part_c.py +0 -0
  811. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0660_part_d.py +0 -0
  812. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0660_part_e.py +0 -0
  813. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0670_followups.py +0 -0
  814. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0670_part_a.py +0 -0
  815. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0670_part_b.py +0 -0
  816. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0670_part_c.py +0 -0
  817. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0670_part_d.py +0 -0
  818. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0670_part_e.py +0 -0
  819. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0670_part_f.py +0 -0
  820. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0680_followups.py +0 -0
  821. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0680_part_a.py +0 -0
  822. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0680_part_b.py +0 -0
  823. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0680_part_c.py +0 -0
  824. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0680_part_d.py +0 -0
  825. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0680_part_e.py +0 -0
  826. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0690_part_a.py +0 -0
  827. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0690_part_b.py +0 -0
  828. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0690_part_c.py +0 -0
  829. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0690_part_d.py +0 -0
  830. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0690_part_e.py +0 -0
  831. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0700_part_a.py +0 -0
  832. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0700_part_b.py +0 -0
  833. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0700_part_c.py +0 -0
  834. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0700_part_d.py +0 -0
  835. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0700_part_e.py +0 -0
  836. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0700_part_f.py +0 -0
  837. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07110.py +0 -0
  838. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07111.py +0 -0
  839. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07112.py +0 -0
  840. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07113.py +0 -0
  841. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07114.py +0 -0
  842. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07115.py +0 -0
  843. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07116.py +0 -0
  844. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07117.py +0 -0
  845. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07118.py +0 -0
  846. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07119.py +0 -0
  847. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0712.py +0 -0
  848. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07120.py +0 -0
  849. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07121.py +0 -0
  850. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07122.py +0 -0
  851. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07123.py +0 -0
  852. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07124.py +0 -0
  853. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07125.py +0 -0
  854. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07126.py +0 -0
  855. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07127.py +0 -0
  856. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07128.py +0 -0
  857. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07129.py +0 -0
  858. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0713.py +0 -0
  859. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07130.py +0 -0
  860. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07131.py +0 -0
  861. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07132.py +0 -0
  862. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v07133.py +0 -0
  863. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0714.py +0 -0
  864. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0715.py +0 -0
  865. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0716.py +0 -0
  866. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0717.py +0 -0
  867. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0718.py +0 -0
  868. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_v0719.py +0 -0
  869. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_validator.py +0 -0
  870. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_vision.py +0 -0
  871. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_vllm_serve.py +0 -0
  872. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_warmup.py +0 -0
  873. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_why.py +0 -0
  874. {soup_cli-0.71.33 → soup_cli-0.71.34}/tests/test_windows_encoding.py +0 -0
@@ -12,6 +12,27 @@ reproducing 70+ versions of notes.
12
12
 
13
13
  ## [Unreleased]
14
14
 
15
+ ## [0.71.34] - 2026-07-15
16
+
17
+ ### Added
18
+ - **`soup adapters arithmetic` — task-vector algebra over LoRA adapters (add / scale / negate).**
19
+ Apply task arithmetic (arXiv:2212.04089) to LoRA deltas via an expression such as
20
+ `"coder + 0.5*math - toxic"`, mapping names to adapter dirs with repeatable
21
+ `--adapter name=path`. Produces one merged adapter you can serve or merge.
22
+ - Signed, un-normalized element-wise combine over same-rank adapters; the effective
23
+ delta `ΔW = B @ A` scales **linearly** with each coefficient (negation flips the
24
+ delta, `0.5·` halves it) via a √|c| factor split — not the `c²` a naive sum gives.
25
+ Mixed-rank inputs are refused with a clear "harmonize rank" message.
26
+ - Reuses the backdoor-scan gate (refuses a FAIL-scanned input unless `--allow-unscanned`)
27
+ and a same-base-model check (`--allow-cross-base` to override). Hand-written expression
28
+ parser (no `eval`), cwd-contained/symlink-rejecting paths, exit 0 = ok / 1 = refusal.
29
+ - **LISA — Layerwise Importance Sampled AdamW (arXiv:2403.17919).** Full-fine-tuning
30
+ quality at LoRA-like memory: every N steps LISA freezes all decoder layers except a
31
+ small random set (embeddings + head always trainable). Enable with
32
+ `training.lisa_enabled: true` (+ `lisa_num_layers`, `lisa_interval_steps`) on a
33
+ `task: sft`, transformers, text, `quantization: none` run; mutually exclusive with
34
+ LoRA features and the other freeze mechanisms. Live on a 4 GB GPU for small models.
35
+
15
36
  ## [0.71.33] - 2026-07-13
16
37
 
17
38
  ### Added
@@ -120,7 +120,7 @@ src/soup_cli/
120
120
  templates/ - 17 built-in soup.yaml templates (YAML + manifest.json) with load_template loader (v0.39.0, +bco v0.40.0)
121
121
  ui/ - Web UI (FastAPI + HTML/JS SPA)
122
122
 
123
- tests/ - Test suite (311 files, 15806 tests)
123
+ tests/ - Test suite (312 files, 15906 tests)
124
124
  examples/ - Real-world config examples and datasets
125
125
  ```
126
126
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: soup-cli
3
- Version: 0.71.33
3
+ Version: 0.71.34
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,45 +193,38 @@ infrastructure instead of improving models. Soup fixes that.
193
193
 
194
194
  ## What's New
195
195
 
196
- **v0.71.33`soup draft`: know whether speculative decoding is actually worth it.** Everyone tells you to bolt a draft model onto your server for a free speedup. Nobody tells you to *measure* it first. Now you can.
197
-
198
- - **`soup draft measure`.** Reports a draft's **acceptance rate** the fraction of your target's
199
- own greedy tokens the draft would have proposed correctly plus **real plain-vs-assisted
200
- tok/s**. Exit 0 / 2 (below `--min-acceptance`) / 1, so CI can gate on it.
201
- - **`soup draft distill`.** Distils your tuned target into a tiny draft base (logit KD over the
202
- existing `task: distill` trainer) and emits a **dense** model, loadable straight as an
203
- `assistant_model`.
204
- - **Auto-wired into serving.** Drafts land in a local registry that `soup serve --auto-spec`
205
- consults *before* the built-in pairing table so a draft you trained yourself just gets used.
206
- - **What the measurement actually told us (honestly).** On `SmolLM2-360M-Instruct`
207
- `SmolLM2-135M-Instruct`: the stock draft already scored **69.3%**, and distilling it changed
208
- nothing (69.7% at 2 epochs, 69.3% at 10). Assisted decoding was a **net slowdown** (0.55–0.64×).
209
- A small same-family draft is already at its ceiling. **That negative result is the feature
210
- working** — it's the number you want *before* you ship speculative decoding, not after.
211
- Whether distillation pays off on a larger or genuinely diverged pair is unproven on a 4 GB box.
196
+ **v0.71.34adapter algebra + LISA.** Compose fine-tunes like vectors, and train big-model quality on a small-model memory budget.
197
+
198
+ - **`soup adapters arithmetic "coder + 0.5*math - toxic"`.** Task-vector algebra over LoRA
199
+ adapters (arXiv:2212.04089) **add, scale, and NEGATE** trained behaviours into one merged
200
+ adapter. The math is done right: a LoRA's effective delta `ΔW = B·A` scales *linearly* with
201
+ each coefficient (subtracting an adapter actually removes its behaviour), not quadratically.
202
+ Same-base + backdoor-scan gated; mixed ranks refused with a clear message.
203
+ - **LISA — layerwise importance sampling (`training.lisa_enabled`).** Full-fine-tuning quality
204
+ at LoRA-like memory (arXiv:2403.17919): every N steps LISA re-activates a small random set of
205
+ decoder layers (embeddings + head always on) and freezes the rest. Live on a 4 GB GPU.
206
+ - **Verified on real models (RTX 3050).** LISA trains SmolLM2-135M end-to-end; `2·a` produces an
207
+ adapter whose ΔW is *exactly* 2× the original's the merged adapter loads and serves.
212
208
 
213
209
  ```bash
214
- soup draft measure --target ./my-tuned-model --draft HuggingFaceTB/SmolLM2-135M-Instruct \
215
- --prompts prod-prompts.jsonl # -> acceptance %, real tok/s, ship-or-not
210
+ soup adapters arithmetic "coder - toxic" \
211
+ --adapter coder=./coder-lora --adapter toxic=./toxic-lora -o ./cleaned
212
+
213
+ soup train --config sft.yaml # with training.lisa_enabled: true, lisa_num_layers: 2
216
214
  ```
217
215
 
218
216
  <details>
219
- <summary>Previous release — v0.71.32, ASR fine-tuning (Whisper)</summary>
217
+ <summary>Previous release — v0.71.33, <code>soup draft</code> (measure speculative decoding)</summary>
220
218
 
221
- Fine-tune Whisper on your accent or domain, locally: `task='asr'` (`AsrTrainerWrapper` over HF
222
- `Seq2SeqTrainer` + `WhisperProcessor`), `soup infer --task asr` with per-row + corpus **WER/CER**,
223
- pure-python metrics in `soup_cli.utils.asr_metrics`, and 4 new recipes (catalog 138 → 142).
224
- whisper-tiny (39M) / base (74M) train on a 4 GB GPU.
219
+ `soup draft measure` reports a draft model's **acceptance rate** + real plain-vs-assisted tok/s
220
+ (exit 0/2/1 for CI); `soup draft distill` distils your target into a dense tiny draft, auto-wired
221
+ into `soup serve --auto-spec`. The honest result on a small same-family pair: distillation didn't
222
+ move acceptance (69.3% → 69.3%) and assisted decoding was a net slowdown — which is exactly the
223
+ number you want *before* shipping speculative decoding.
225
224
 
226
- ```yaml
227
- base: openai/whisper-tiny
228
- task: asr
229
- data:
230
- format: asr # rows: {"audio": "clip.wav", "text": "hello world"}
231
- audio_dir: ./data/audio
232
- training:
233
- asr_language: en
234
- asr_lora: true # optional; default = full fine-tune
225
+ ```bash
226
+ soup draft measure --target ./my-tuned-model --draft HuggingFaceTB/SmolLM2-135M-Instruct \
227
+ --prompts prod-prompts.jsonl # -> acceptance %, real tok/s, ship-or-not
235
228
  ```
236
229
 
237
230
  </details>
@@ -315,7 +308,7 @@ The full feature reference lives in [`docs/`](docs/). Start here:
315
308
  | [Performance & quantization](docs/performance-and-quantization.md) | QAT, FP8, Quant Menu (I + II), KV-cache, NVFP4, save formats, Cut Cross-Entropy, gradient checkpointing, kernels, activation offloading, multi-GPU / DeepSpeed / FSDP |
316
309
  | [Data engineering](docs/data.md) | Formats, the Axolotl/LF-parity pipeline, data tools, synthetic generation & forge, quality scorecards, trace tooling, remote datasets, mixing, recipe DAGs |
317
310
  | [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` |
318
- | [Serving & export](docs/serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding, deploy autopilot, Web UI, Agent Forge |
311
+ | [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 |
319
312
  | [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) |
320
313
  | [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 |
321
314
  | [Command reference](docs/commands.md) | The full `soup` command list |
@@ -49,45 +49,38 @@ infrastructure instead of improving models. Soup fixes that.
49
49
 
50
50
  ## What's New
51
51
 
52
- **v0.71.33`soup draft`: know whether speculative decoding is actually worth it.** Everyone tells you to bolt a draft model onto your server for a free speedup. Nobody tells you to *measure* it first. Now you can.
53
-
54
- - **`soup draft measure`.** Reports a draft's **acceptance rate** the fraction of your target's
55
- own greedy tokens the draft would have proposed correctly plus **real plain-vs-assisted
56
- tok/s**. Exit 0 / 2 (below `--min-acceptance`) / 1, so CI can gate on it.
57
- - **`soup draft distill`.** Distils your tuned target into a tiny draft base (logit KD over the
58
- existing `task: distill` trainer) and emits a **dense** model, loadable straight as an
59
- `assistant_model`.
60
- - **Auto-wired into serving.** Drafts land in a local registry that `soup serve --auto-spec`
61
- consults *before* the built-in pairing table so a draft you trained yourself just gets used.
62
- - **What the measurement actually told us (honestly).** On `SmolLM2-360M-Instruct`
63
- `SmolLM2-135M-Instruct`: the stock draft already scored **69.3%**, and distilling it changed
64
- nothing (69.7% at 2 epochs, 69.3% at 10). Assisted decoding was a **net slowdown** (0.55–0.64×).
65
- A small same-family draft is already at its ceiling. **That negative result is the feature
66
- working** — it's the number you want *before* you ship speculative decoding, not after.
67
- Whether distillation pays off on a larger or genuinely diverged pair is unproven on a 4 GB box.
52
+ **v0.71.34adapter algebra + LISA.** Compose fine-tunes like vectors, and train big-model quality on a small-model memory budget.
53
+
54
+ - **`soup adapters arithmetic "coder + 0.5*math - toxic"`.** Task-vector algebra over LoRA
55
+ adapters (arXiv:2212.04089) **add, scale, and NEGATE** trained behaviours into one merged
56
+ adapter. The math is done right: a LoRA's effective delta `ΔW = B·A` scales *linearly* with
57
+ each coefficient (subtracting an adapter actually removes its behaviour), not quadratically.
58
+ Same-base + backdoor-scan gated; mixed ranks refused with a clear message.
59
+ - **LISA — layerwise importance sampling (`training.lisa_enabled`).** Full-fine-tuning quality
60
+ at LoRA-like memory (arXiv:2403.17919): every N steps LISA re-activates a small random set of
61
+ decoder layers (embeddings + head always on) and freezes the rest. Live on a 4 GB GPU.
62
+ - **Verified on real models (RTX 3050).** LISA trains SmolLM2-135M end-to-end; `2·a` produces an
63
+ adapter whose ΔW is *exactly* 2× the original's the merged adapter loads and serves.
68
64
 
69
65
  ```bash
70
- soup draft measure --target ./my-tuned-model --draft HuggingFaceTB/SmolLM2-135M-Instruct \
71
- --prompts prod-prompts.jsonl # -> acceptance %, real tok/s, ship-or-not
66
+ soup adapters arithmetic "coder - toxic" \
67
+ --adapter coder=./coder-lora --adapter toxic=./toxic-lora -o ./cleaned
68
+
69
+ soup train --config sft.yaml # with training.lisa_enabled: true, lisa_num_layers: 2
72
70
  ```
73
71
 
74
72
  <details>
75
- <summary>Previous release — v0.71.32, ASR fine-tuning (Whisper)</summary>
73
+ <summary>Previous release — v0.71.33, <code>soup draft</code> (measure speculative decoding)</summary>
76
74
 
77
- Fine-tune Whisper on your accent or domain, locally: `task='asr'` (`AsrTrainerWrapper` over HF
78
- `Seq2SeqTrainer` + `WhisperProcessor`), `soup infer --task asr` with per-row + corpus **WER/CER**,
79
- pure-python metrics in `soup_cli.utils.asr_metrics`, and 4 new recipes (catalog 138 → 142).
80
- whisper-tiny (39M) / base (74M) train on a 4 GB GPU.
75
+ `soup draft measure` reports a draft model's **acceptance rate** + real plain-vs-assisted tok/s
76
+ (exit 0/2/1 for CI); `soup draft distill` distils your target into a dense tiny draft, auto-wired
77
+ into `soup serve --auto-spec`. The honest result on a small same-family pair: distillation didn't
78
+ move acceptance (69.3% → 69.3%) and assisted decoding was a net slowdown — which is exactly the
79
+ number you want *before* shipping speculative decoding.
81
80
 
82
- ```yaml
83
- base: openai/whisper-tiny
84
- task: asr
85
- data:
86
- format: asr # rows: {"audio": "clip.wav", "text": "hello world"}
87
- audio_dir: ./data/audio
88
- training:
89
- asr_language: en
90
- asr_lora: true # optional; default = full fine-tune
81
+ ```bash
82
+ soup draft measure --target ./my-tuned-model --draft HuggingFaceTB/SmolLM2-135M-Instruct \
83
+ --prompts prod-prompts.jsonl # -> acceptance %, real tok/s, ship-or-not
91
84
  ```
92
85
 
93
86
  </details>
@@ -171,7 +164,7 @@ The full feature reference lives in [`docs/`](docs/). Start here:
171
164
  | [Performance & quantization](docs/performance-and-quantization.md) | QAT, FP8, Quant Menu (I + II), KV-cache, NVFP4, save formats, Cut Cross-Entropy, gradient checkpointing, kernels, activation offloading, multi-GPU / DeepSpeed / FSDP |
172
165
  | [Data engineering](docs/data.md) | Formats, the Axolotl/LF-parity pipeline, data tools, synthetic generation & forge, quality scorecards, trace tooling, remote datasets, mixing, recipe DAGs |
173
166
  | [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` |
174
- | [Serving & export](docs/serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding, deploy autopilot, Web UI, Agent Forge |
167
+ | [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 |
175
168
  | [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) |
176
169
  | [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 |
177
170
  | [Command reference](docs/commands.md) | The full `soup` command list |
@@ -12,7 +12,7 @@ feature reference — every `soup` capability, grouped by area.
12
12
  | [Performance & quantization](performance-and-quantization.md) | QAT, FP8, Quant Menu (I + II), KV-cache, NVFP4, save formats, Cut Cross-Entropy, gradient checkpointing, kernels, activation offloading, multi-GPU / DeepSpeed / FSDP |
13
13
  | [Data engineering](data.md) | Formats, the Axolotl/LF-parity pipeline, data tools, synthetic generation & forge, quality scorecards, trace tooling, remote datasets, mixing, recipe DAGs |
14
14
  | [Evaluation & probes](evaluation.md) | Eval design/gate, eval-gated training, benchmarks, NLG metrics, calibration, Elo arena, diagnose, `soup ship` verdict, post-train X-ray probes, A/B, drift, tunability, `soup advise` |
15
- | [Serving & export](serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding, deploy autopilot, Web UI, Agent Forge |
15
+ | [Serving & export](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 |
16
16
  | [Adapters, registry & governance](adapters-and-governance.md) | Adapter lifecycle/management, model registry, Soup Cans, the data flywheel (`soup loop`), knowledge editing, steering, supply-chain controls |
17
17
  | [Backends, platform & ops](backends-and-ops.md) | MLX/Unsloth backends, Modal cloud GPU training, alternative hubs, HF Hub integration, autopilot, experiment tracking, plan/apply, env lockfiles, hardware-fit, completions, plugins, utility commands |
18
18
  | [Command reference](commands.md) | The full `soup` command list |
@@ -270,6 +270,12 @@ soup adapters merge ./run-v17 ./run-v18 ./run-v19 -o ./merged --strategy ties \
270
270
  soup adapters merge ./run-v17 ./run-v18 -o ./merged --strategy dare \
271
271
  --density 0.5 --seed 42
272
272
 
273
+ # Task-vector arithmetic (v0.71.34) — add / scale / NEGATE trained behaviours
274
+ # into one adapter (arXiv:2212.04089). Names map to dirs via --adapter name=path.
275
+ soup adapters arithmetic "coder + 0.5*math - toxic" \
276
+ --adapter coder=./coder-lora --adapter math=./math-lora \
277
+ --adapter toxic=./toxic-lora -o ./blended
278
+
273
279
  # Leave-one-out ablation plan against a 4-hour wall-clock budget
274
280
  soup adapters blame ./run-v18 --dataset train.jsonl --layer q_proj.7 \
275
281
  --budget 4h --shards 10 --plan-only
@@ -314,6 +320,8 @@ soup adapters branches
314
320
 
315
321
  **v0.71.4:** the merge verdict is now LIVE — `soup adapters merge … --canary suite.json` lifts the `MergeReport.verdict` `UNKNOWN` stub. A pre-scored `{"baseline_scores","candidate_scores"}` suite classifies the blend OK / MINOR / MAJOR with no model load; a `{"tasks":[...]}` suite uses an injectable scorer. `--strict-verdict` exits 2 on MAJOR. The backdoor-scan and license-conflict gates now run for **every** strategy, including `cmaes`. `soup adapters branch <name> --from-registry <id>` / `--attach-to-registry <id>` link training-env snapshots into the Registry lineage DAG (shown as a `branches` node in `soup history`).
316
322
 
323
+ **v0.71.34 — task-vector arithmetic.** `soup adapters arithmetic "<expr>"` applies task arithmetic (arXiv:2212.04089) to LoRA deltas: **add** (blend two skills), **scale** (`2*coder`), and — the differentiator — **negate** (`- toxic` removes a behaviour). Names in the expression map to adapter dirs via repeatable `--adapter name=path`. The math is done at the effective-delta level: a LoRA contributes `ΔW = B·A`, so the coefficient is applied so that `ΔW` scales **linearly** (subtracting an adapter actually negates its delta — a naïve element-wise sum would scale by `c²`, making negation a no-op). Adapters must share the base model (`--allow-cross-base` to override) and rank (mixed ranks are refused, not silently approximated). Each input passes the v0.71.2 backdoor-scan gate (`--allow-unscanned` to skip). Output is a single loadable adapter; exit 0 = ok, 1 = refusal.
324
+
317
325
 
318
326
  ## Soup Cans (Shareable Recipes)
319
327
 
@@ -27,6 +27,7 @@ soup merge --adapter ./output Merge LoRA with base model
27
27
  soup merge-sharded-fsdp-weights ./shards -o merged.safetensors Consolidate FSDP shards into one safetensors (v0.71.14; --plan-only previews)
28
28
  soup delinearize-llama4 ./src --target ./out [--num-experts N] [--plan-only] Live Llama-4 fused-expert reshape [E*din,dout] -> [E,din,dout] + sidecar copy (v0.71.21)
29
29
  soup spectrum scan --model <id|path> --top-percent 50 [--modules mlp,attn] [-o patch.yaml] Spectrum SNR scan (no model load) -> training.unfrozen_parameters YAML patch (v0.71.23)
30
+ soup train --config sft.yaml # training.lisa_enabled: true [lisa_num_layers lisa_interval_steps] LISA layerwise importance sampling — full-FT quality at LoRA-like memory (sft/transformers/text/quantization=none) (v0.71.34)
30
31
  soup export --model ./output --format gguf Export to GGUF (Ollama)
31
32
  soup export --model ./output --deploy ollama Export GGUF + auto-deploy to Ollama
32
33
  soup export --model ./output --format onnx Export to ONNX
@@ -184,6 +185,7 @@ soup adapters sign <adapter> [--backend unsigned|ed25519] [--key <pem>|--generat
184
185
  soup adapters verify <adapter> [--strict] [--public-key <pem>] Verify manifest + ed25519 signature
185
186
  soup adapters check-safetensors <adapter> [--strict] Refuse pickle / PyTorch-classic weights
186
187
  soup adapters merge ... [--license <id>] [--license-override <reason>] [--allow-unscanned] License + backdoor-scan gates (auto-detect license; scan FAIL refused)
188
+ soup adapters arithmetic "coder + 0.5*math - toxic" --adapter coder=<p> --adapter math=<p> --adapter toxic=<p> -o <out> [--allow-unscanned --allow-cross-base] Task-vector algebra over LoRA adapters (add/scale/negate; same-rank; scan + same-base gated) (v0.71.34)
187
189
  soup attest emit ... [--sign ed25519 --key <pem>] [-o att.json] in-toto/SLSA-3 attestation (+ .sig sidecar)
188
190
  soup attest verify <statement> --signature <sig> [--public-key <pem>] Verify ed25519 attestation signature
189
191
  soup airgap-bundle --model <m> --output <out.tar> [--repro-receipt <r.json>] Signed tarball for data-diode transfer (embeds repro-receipt)
@@ -380,6 +380,25 @@ training:
380
380
 
381
381
  Works with and without LoRA. When used with LoRA, LoRA is applied only to unfrozen layers.
382
382
 
383
+ ## LISA — Layerwise Importance Sampling (v0.71.34)
384
+
385
+ LISA (Layerwise Importance Sampled AdamW, [arXiv:2403.17919](https://arxiv.org/abs/2403.17919)) targets full-fine-tuning quality at LoRA-like memory. Instead of picking layers once (that's Spectrum's static `unfrozen_parameters`), LISA re-samples a small random set of decoder layers **every N steps** and freezes the rest; the input embeddings, the LM head, and the final norm stay trainable throughout.
386
+
387
+ ```yaml
388
+ task: sft
389
+ backend: transformers
390
+ modality: text
391
+ training:
392
+ quantization: none # LISA is full-FT of the active layers
393
+ lisa_enabled: true
394
+ lisa_num_layers: 2 # decoder layers active per interval (clamped to model depth)
395
+ lisa_interval_steps: 20 # re-sample cadence, in global steps
396
+ ```
397
+
398
+ Because only a handful of layers train at any moment (and their optimizer state is cleared when they're re-frozen), peak optimizer memory is roughly `embeddings + head + lisa_num_layers` — far below a full fine-tune, while every layer still gets updated over the course of training. LISA is `sft` + `transformers` + `text` + `quantization: none` only, and is mutually exclusive with LoRA features, `freeze_layers`/`freeze_ratio`, and Spectrum's `unfrozen_parameters` (each independently decides what trains).
399
+
400
+ Implementation note: the model is left fully trainable at trainer-setup time so HF's optimizer (built before the first callback fires) contains every decoder parameter; the LISA callback then toggles `requires_grad` per interval — frozen parameters produce no gradient and the optimizer skips them.
401
+
383
402
 
384
403
  ## Loss Watchdog
385
404
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "soup-cli"
7
- version = "0.71.33"
7
+ version = "0.71.34"
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.33"
3
+ __version__ = "0.71.34"
@@ -15,6 +15,17 @@ console = Console()
15
15
 
16
16
  app = typer.Typer(no_args_is_help=True)
17
17
 
18
+ # Strip C0/DEL control bytes from adapter-config-derived text before it reaches
19
+ # the terminal. rich.markup.escape() only neutralises Rich's [...] tags, not raw
20
+ # ANSI/OSC/ESC bytes that could spoof a title bar or hide a refusal (mirrors
21
+ # commands/data_doctor.py::_for_terminal). Keep tab/LF/CR.
22
+ _CONTROL_STRIP_TABLE = {i: None for i in range(0x20) if i not in (0x09, 0x0A, 0x0D)}
23
+ _CONTROL_STRIP_TABLE[0x7F] = None
24
+
25
+
26
+ def _for_terminal(text: str) -> str:
27
+ return text.translate(_CONTROL_STRIP_TABLE)
28
+
18
29
 
19
30
  def _find_adapters(directory: Path, max_depth: int = 6) -> list[Path]:
20
31
  """Recursively find directories containing adapter_config.json.
@@ -664,6 +675,220 @@ def merge(
664
675
  raise typer.Exit(2)
665
676
 
666
677
 
678
+ @app.command()
679
+ def arithmetic(
680
+ expression: str = typer.Argument(
681
+ ...,
682
+ help='Task-vector expression, e.g. "coder + 0.5*math - toxic".',
683
+ ),
684
+ adapter: list[str] = typer.Option(
685
+ ...,
686
+ "--adapter",
687
+ help=(
688
+ "name=path mapping for each adapter referenced in the expression "
689
+ "(repeatable). Names use [A-Za-z0-9_.-]."
690
+ ),
691
+ ),
692
+ output: str = typer.Option(
693
+ ..., "--output", "-o", help="Output directory for the merged adapter"
694
+ ),
695
+ allow_unscanned: bool = typer.Option(
696
+ False,
697
+ "--allow-unscanned",
698
+ help=(
699
+ "Skip the backdoor-scan gate (v0.71.2 #192). By default refuses an "
700
+ "input whose `adapters scan` returns FAIL or cannot be scanned."
701
+ ),
702
+ ),
703
+ allow_cross_base: bool = typer.Option(
704
+ False,
705
+ "--allow-cross-base",
706
+ help=(
707
+ "Allow combining adapters trained on different base models. By "
708
+ "default a base-model mismatch is refused (task vectors from "
709
+ "different bases are not comparable)."
710
+ ),
711
+ ),
712
+ ):
713
+ """Task-vector arithmetic over LoRA adapters (add / scale / negate) (v0.71.34).
714
+
715
+ Applies task arithmetic (arXiv:2212.04089) element-wise to LoRA deltas of
716
+ same-rank adapters. Example:
717
+
718
+ soup adapters arithmetic "coder + 0.5*math - toxic" \\
719
+ --adapter coder=./coder --adapter math=./math \\
720
+ --adapter toxic=./toxic -o ./merged
721
+
722
+ Exit 0 = success, 1 = any refusal (bad expression, unknown adapter, rank
723
+ mismatch, cross-base without --allow-cross-base, scan FAIL, path escape).
724
+ """
725
+ import re
726
+
727
+ from soup_cli.utils.adapter_arithmetic import (
728
+ ArithmeticReport,
729
+ merge_task_arithmetic,
730
+ parse_expression,
731
+ read_adapter_base,
732
+ )
733
+ from soup_cli.utils.adapter_diff import load_adapter_weights
734
+ from soup_cli.utils.adapter_merge import write_merged_adapter
735
+ from soup_cli.utils.paths import enforce_under_cwd_and_no_symlink
736
+
737
+ # 1. Parse the --adapter name=path map.
738
+ name_re = re.compile(r"^[A-Za-z0-9_.\-]+$")
739
+ mapping: dict[str, str] = {}
740
+ for spec in adapter:
741
+ if "=" not in spec:
742
+ console.print(
743
+ f"[red]--adapter must be name=path, got {escape(spec)}[/]"
744
+ )
745
+ raise typer.Exit(1)
746
+ name, _, path = spec.partition("=")
747
+ name, path = name.strip(), path.strip()
748
+ if not name_re.match(name):
749
+ console.print(
750
+ f"[red]Invalid adapter name {escape(name)!r} "
751
+ "(use [A-Za-z0-9_.-]).[/]"
752
+ )
753
+ raise typer.Exit(1)
754
+ if not path:
755
+ console.print(f"[red]--adapter {escape(name)} has an empty path[/]")
756
+ raise typer.Exit(1)
757
+ if name in mapping:
758
+ console.print(f"[red]Duplicate --adapter name {escape(name)}[/]")
759
+ raise typer.Exit(1)
760
+ try:
761
+ enforce_under_cwd_and_no_symlink(path, "adapter")
762
+ except (ValueError, OSError) as exc:
763
+ console.print(
764
+ f"[red]Adapter path refused for {escape(name)}: "
765
+ f"{escape(str(exc))}[/]"
766
+ )
767
+ raise typer.Exit(1) from exc
768
+ mapping[name] = path
769
+
770
+ # 2. Parse the expression against the declared names.
771
+ try:
772
+ terms = parse_expression(expression, set(mapping))
773
+ except (ValueError, TypeError) as exc:
774
+ console.print(f"[red]Bad expression: {escape(str(exc))}[/]")
775
+ raise typer.Exit(1) from exc
776
+
777
+ referenced = [t.name for t in terms]
778
+ ref_paths = [mapping[n] for n in referenced]
779
+
780
+ # 3. Backdoor-scan gate (mirrors `adapters merge`, #192). Refuse FAIL /
781
+ # un-scannable inputs unless --allow-unscanned; WARN is advisory.
782
+ if not allow_unscanned:
783
+ from soup_cli.utils.adapter_scan import scan_adapter
784
+
785
+ for name, path in zip(referenced, ref_paths):
786
+ try:
787
+ scan_report = scan_adapter(path)
788
+ except (FileNotFoundError, ValueError, TypeError, RuntimeError) as exc:
789
+ console.print(
790
+ f"[red]Could not scan {escape(name)} "
791
+ f"({escape(str(exc))}).[/]\n"
792
+ "[dim]Pass --allow-unscanned to proceed anyway.[/]"
793
+ )
794
+ raise typer.Exit(1) from exc
795
+ if scan_report.overall == "FAIL":
796
+ console.print(
797
+ f"[red]Backdoor scan FAILED for {escape(name)}: "
798
+ f"{escape(scan_report.summary)}[/]\n"
799
+ "[dim]Pass --allow-unscanned to proceed anyway "
800
+ "(not recommended).[/]"
801
+ )
802
+ raise typer.Exit(1)
803
+ if scan_report.overall == "WARN":
804
+ console.print(
805
+ f"[yellow]Backdoor scan WARN for {escape(name)}: "
806
+ f"{escape(scan_report.summary)} — proceeding.[/]"
807
+ )
808
+
809
+ # 4. Same-base check (unless overridden).
810
+ bases: dict[str, str | None] = {}
811
+ for name, path in zip(referenced, ref_paths):
812
+ try:
813
+ bases[name] = read_adapter_base(path)
814
+ except (ValueError, OSError) as exc:
815
+ console.print(
816
+ f"[red]Could not read base model for {escape(name)}: "
817
+ f"{escape(str(exc))}[/]"
818
+ )
819
+ raise typer.Exit(1) from exc
820
+ distinct = {b for b in bases.values() if b is not None}
821
+ if len(distinct) > 1:
822
+ if not allow_cross_base:
823
+ listed = ", ".join(
824
+ f"{escape(n)}={escape(_for_terminal(str(b)))}"
825
+ for n, b in bases.items()
826
+ )
827
+ console.print(
828
+ f"[red]Base-model mismatch across adapters: {listed}.[/]\n"
829
+ "[dim]Task vectors from different bases are not comparable. "
830
+ "Pass --allow-cross-base to proceed anyway.[/]"
831
+ )
832
+ raise typer.Exit(1)
833
+ console.print(
834
+ "[yellow]--allow-cross-base: combining adapters from different "
835
+ "base models (results may be meaningless).[/]"
836
+ )
837
+
838
+ # 5. Output containment.
839
+ try:
840
+ enforce_under_cwd_and_no_symlink(output, "output")
841
+ except (ValueError, OSError) as exc:
842
+ console.print(f"[red]Output path refused: {escape(str(exc))}[/]")
843
+ raise typer.Exit(1) from exc
844
+
845
+ # 6. Load, signed-merge, write.
846
+ try:
847
+ weights_list = [load_adapter_weights(mapping[n]) for n in referenced]
848
+ except (FileNotFoundError, ValueError, RuntimeError) as exc:
849
+ console.print(f"[red]Could not load adapter weights: {escape(str(exc))}[/]")
850
+ raise typer.Exit(1) from exc
851
+ coeffs = [t.coeff for t in terms]
852
+ try:
853
+ merged, skipped = merge_task_arithmetic(weights_list, coeffs)
854
+ except ValueError as exc:
855
+ console.print(f"[red]Merge failed: {escape(str(exc))}[/]")
856
+ raise typer.Exit(1) from exc
857
+ if not merged:
858
+ console.print(
859
+ "[red]No shared LoRA tensors across the referenced adapters — "
860
+ "nothing to merge.[/]"
861
+ )
862
+ raise typer.Exit(1)
863
+ try:
864
+ write_merged_adapter(output, ref_paths[0], merged)
865
+ except (ValueError, RuntimeError, OSError) as exc:
866
+ console.print(f"[red]Could not write merged adapter: {escape(str(exc))}[/]")
867
+ raise typer.Exit(1) from exc
868
+
869
+ report = ArithmeticReport(
870
+ expression=expression,
871
+ terms=tuple(terms),
872
+ output_dir=output,
873
+ merged_layers=len(merged),
874
+ skipped_layers=skipped,
875
+ base_model=next(iter(distinct)) if len(distinct) == 1 else None,
876
+ )
877
+ terms_str = " ".join(
878
+ f"[bold]{t.coeff:+g}[/]·{escape(t.name)}" for t in report.terms
879
+ )
880
+ panel = Panel(
881
+ f"Expression: {escape(report.expression)}\n"
882
+ f"Terms: {terms_str}\n"
883
+ f"Base model: {escape(_for_terminal(str(report.base_model)))}\n"
884
+ f"Merged tensors: [bold]{report.merged_layers}[/]\n"
885
+ f"Skipped tensors:{len(report.skipped_layers)}\n"
886
+ f"Output: [bold]{escape(report.output_dir)}[/]",
887
+ title="Adapter arithmetic",
888
+ )
889
+ console.print(panel)
890
+
891
+
667
892
  @app.command()
668
893
  def blame(
669
894
  adapter_dir: str = typer.Argument(..., help="Path to trained adapter"),