soup-cli 0.71.20__tar.gz → 0.71.22__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 (831) hide show
  1. {soup_cli-0.71.20 → soup_cli-0.71.22}/CHANGELOG.md +117 -0
  2. {soup_cli-0.71.20 → soup_cli-0.71.22}/CONTRIBUTING.md +2 -2
  3. {soup_cli-0.71.20 → soup_cli-0.71.22}/PKG-INFO +17 -15
  4. {soup_cli-0.71.20 → soup_cli-0.71.22}/README.md +16 -14
  5. {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/backends-and-ops.md +2 -2
  6. {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/commands.md +2 -1
  7. {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/performance-and-quantization.md +5 -4
  8. {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/training.md +4 -3
  9. {soup_cli-0.71.20 → soup_cli-0.71.22}/pyproject.toml +15 -15
  10. soup_cli-0.71.22/src/soup_cli/__init__.py +3 -0
  11. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/apple_adapter.py +27 -3
  12. soup_cli-0.71.22/src/soup_cli/commands/delinearize_llama4.py +105 -0
  13. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/deploy.py +24 -20
  14. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/config/schema.py +43 -4
  15. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/grpo.py +40 -0
  16. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/tts.py +20 -13
  17. soup_cli-0.71.22/src/soup_cli/utils/advanced_precision.py +355 -0
  18. soup_cli-0.71.22/src/soup_cli/utils/agent_rollout.py +394 -0
  19. soup_cli-0.71.22/src/soup_cli/utils/apple_adapter.py +576 -0
  20. soup_cli-0.71.22/src/soup_cli/utils/delinearize_llama4.py +370 -0
  21. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/deploy_measure.py +265 -8
  22. soup_cli-0.71.22/src/soup_cli/utils/grpo_long_context.py +231 -0
  23. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/minillm.py +114 -7
  24. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/mole_routing.py +144 -21
  25. soup_cli-0.71.22/src/soup_cli/utils/tts_codec.py +373 -0
  26. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/v028_features.py +25 -0
  27. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/vllm.py +10 -0
  28. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0440_part_d.py +2 -1
  29. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0500_part_b.py +6 -4
  30. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0500_part_c.py +20 -6
  31. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0530.py +8 -6
  32. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0680_part_d.py +10 -5
  33. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07120.py +14 -1
  34. soup_cli-0.71.22/tests/test_v07121.py +2268 -0
  35. soup_cli-0.71.22/tests/test_v07122.py +1343 -0
  36. soup_cli-0.71.20/src/soup_cli/__init__.py +0 -3
  37. soup_cli-0.71.20/src/soup_cli/commands/delinearize_llama4.py +0 -64
  38. soup_cli-0.71.20/src/soup_cli/utils/advanced_precision.py +0 -143
  39. soup_cli-0.71.20/src/soup_cli/utils/agent_rollout.py +0 -130
  40. soup_cli-0.71.20/src/soup_cli/utils/apple_adapter.py +0 -144
  41. soup_cli-0.71.20/src/soup_cli/utils/delinearize_llama4.py +0 -79
  42. soup_cli-0.71.20/src/soup_cli/utils/grpo_long_context.py +0 -96
  43. {soup_cli-0.71.20 → soup_cli-0.71.22}/.dockerignore +0 -0
  44. {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/FUNDING.yml +0 -0
  45. {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  46. {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  47. {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  48. {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/pull_request_template.md +0 -0
  49. {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/workflows/ci.yml +0 -0
  50. {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/workflows/docker.yml +0 -0
  51. {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/workflows/publish.yml +0 -0
  52. {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/workflows/recipe-validation.yml +0 -0
  53. {soup_cli-0.71.20 → soup_cli-0.71.22}/.gitignore +0 -0
  54. {soup_cli-0.71.20 → soup_cli-0.71.22}/.mailmap +0 -0
  55. {soup_cli-0.71.20 → soup_cli-0.71.22}/.pre-commit-config.yaml +0 -0
  56. {soup_cli-0.71.20 → soup_cli-0.71.22}/AGENTS.md +0 -0
  57. {soup_cli-0.71.20 → soup_cli-0.71.22}/CODEOWNERS +0 -0
  58. {soup_cli-0.71.20 → soup_cli-0.71.22}/CODE_OF_CONDUCT.md +0 -0
  59. {soup_cli-0.71.20 → soup_cli-0.71.22}/CONTRIBUTORS.md +0 -0
  60. {soup_cli-0.71.20 → soup_cli-0.71.22}/Dockerfile +0 -0
  61. {soup_cli-0.71.20 → soup_cli-0.71.22}/LICENSE +0 -0
  62. {soup_cli-0.71.20 → soup_cli-0.71.22}/NOTICE +0 -0
  63. {soup_cli-0.71.20 → soup_cli-0.71.22}/SECURITY.md +0 -0
  64. {soup_cli-0.71.20 → soup_cli-0.71.22}/docker-compose.yml +0 -0
  65. {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/README.md +0 -0
  66. {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/adapters-and-governance.md +0 -0
  67. {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/data.md +0 -0
  68. {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/evaluation.md +0 -0
  69. {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/models.md +0 -0
  70. {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/peft-and-efficiency.md +0 -0
  71. {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/serving-and-export.md +0 -0
  72. {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/README.md +0 -0
  73. {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/configs/dpo_chat.yaml +0 -0
  74. {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/configs/dpo_example.yaml +0 -0
  75. {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/configs/grpo_reasoning.yaml +0 -0
  76. {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/configs/rlhf_step1_sft.yaml +0 -0
  77. {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/configs/rlhf_step2_reward.yaml +0 -0
  78. {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/configs/rlhf_step3_ppo.yaml +0 -0
  79. {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/configs/sft_basic.yaml +0 -0
  80. {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/configs/vision_llama.yaml +0 -0
  81. {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/data/alpaca_tiny.jsonl +0 -0
  82. {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/data/chat_preferences.jsonl +0 -0
  83. {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/data/dpo_sample.jsonl +0 -0
  84. {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/data/reasoning_math.jsonl +0 -0
  85. {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/synthetic_workflow.md +0 -0
  86. {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/synthetic_workflow.yaml +0 -0
  87. {soup_cli-0.71.20 → soup_cli-0.71.22}/soup.png +0 -0
  88. {soup_cli-0.71.20 → soup_cli-0.71.22}/soup_logo_svg.svg +0 -0
  89. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/__main__.py +0 -0
  90. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/autopilot/__init__.py +0 -0
  91. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/autopilot/analyzer.py +0 -0
  92. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/autopilot/decisions.py +0 -0
  93. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/autopilot/generate_config.py +0 -0
  94. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cans/__init__.py +0 -0
  95. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cans/pack.py +0 -0
  96. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cans/publish.py +0 -0
  97. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cans/run.py +0 -0
  98. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cans/schema.py +0 -0
  99. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cans/unpack.py +0 -0
  100. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cans/verify.py +0 -0
  101. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cli.py +0 -0
  102. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cloud/__init__.py +0 -0
  103. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cloud/modal.py +0 -0
  104. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/__init__.py +0 -0
  105. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/_eval_v0550.py +0 -0
  106. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/_eval_v0610.py +0 -0
  107. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/_eval_v0650.py +0 -0
  108. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/_eval_v07110.py +0 -0
  109. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/_webhook_cli.py +0 -0
  110. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/ab.py +0 -0
  111. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/active_sample.py +0 -0
  112. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/adapters.py +0 -0
  113. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/advise.py +0 -0
  114. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/agent.py +0 -0
  115. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/airgap.py +0 -0
  116. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/attest.py +0 -0
  117. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/audit_log.py +0 -0
  118. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/autopilot.py +0 -0
  119. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/bench.py +0 -0
  120. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/bom.py +0 -0
  121. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/build.py +0 -0
  122. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/can.py +0 -0
  123. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/chat.py +0 -0
  124. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/compile_cmd.py +0 -0
  125. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/compile_tools.py +0 -0
  126. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/completions.py +0 -0
  127. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/cost.py +0 -0
  128. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/data.py +0 -0
  129. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/data_forge.py +0 -0
  130. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/data_mix.py +0 -0
  131. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/data_score.py +0 -0
  132. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/diagnose.py +0 -0
  133. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/diff.py +0 -0
  134. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/distill_prompt.py +0 -0
  135. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/doctor.py +0 -0
  136. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/drift_alarm.py +0 -0
  137. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/edit.py +0 -0
  138. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/env.py +0 -0
  139. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/eval.py +0 -0
  140. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/expect.py +0 -0
  141. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/export.py +0 -0
  142. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/fetch.py +0 -0
  143. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/generate.py +0 -0
  144. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/history.py +0 -0
  145. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/infer.py +0 -0
  146. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/ingest.py +0 -0
  147. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/init.py +0 -0
  148. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/iterative_dpo.py +0 -0
  149. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/license_advisor.py +0 -0
  150. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/llama.py +0 -0
  151. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/local_rl.py +0 -0
  152. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/lock.py +0 -0
  153. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/loop.py +0 -0
  154. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/merge.py +0 -0
  155. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
  156. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/migrate.py +0 -0
  157. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/monitor.py +0 -0
  158. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/plan.py +0 -0
  159. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/plugins.py +0 -0
  160. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/probe.py +0 -0
  161. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/profile.py +0 -0
  162. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/prune_prompt.py +0 -0
  163. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/push.py +0 -0
  164. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/quantize.py +0 -0
  165. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/quickstart.py +0 -0
  166. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/ra_dit.py +0 -0
  167. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/recipes.py +0 -0
  168. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/registry.py +0 -0
  169. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/runs.py +0 -0
  170. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/serve.py +0 -0
  171. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/steer.py +0 -0
  172. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/sweep.py +0 -0
  173. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/tokenizer.py +0 -0
  174. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/train.py +0 -0
  175. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/tui.py +0 -0
  176. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/tunability.py +0 -0
  177. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/ui.py +0 -0
  178. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/why.py +0 -0
  179. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/config/__init__.py +0 -0
  180. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/config/loader.py +0 -0
  181. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/__init__.py +0 -0
  182. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
  183. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
  184. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
  185. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
  186. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
  187. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
  188. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
  189. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
  190. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
  191. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
  192. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
  193. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
  194. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/augment.py +0 -0
  195. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/chat_templates.py +0 -0
  196. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/collators.py +0 -0
  197. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/formats.py +0 -0
  198. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/loader.py +0 -0
  199. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/loss_mask.py +0 -0
  200. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/providers/__init__.py +0 -0
  201. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/providers/_utils.py +0 -0
  202. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/providers/anthropic.py +0 -0
  203. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/providers/ollama.py +0 -0
  204. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/providers/vllm.py +0 -0
  205. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/sft_format.py +0 -0
  206. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/templates/__init__.py +0 -0
  207. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/templates/code.py +0 -0
  208. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/templates/conversation.py +0 -0
  209. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/templates/preference.py +0 -0
  210. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/templates/qa.py +0 -0
  211. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/templates/reasoning.py +0 -0
  212. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/templates/tool_calling.py +0 -0
  213. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/templates/verifiable.py +0 -0
  214. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/traces/__init__.py +0 -0
  215. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/traces/pair_builder.py +0 -0
  216. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/traces/parsers.py +0 -0
  217. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/traces/quality.py +0 -0
  218. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/validator.py +0 -0
  219. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/__init__.py +0 -0
  220. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/arena.py +0 -0
  221. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
  222. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/calibrate.py +0 -0
  223. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
  224. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/custom.py +0 -0
  225. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/forgetting.py +0 -0
  226. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/gate.py +0 -0
  227. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/human.py +0 -0
  228. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/judge.py +0 -0
  229. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/leaderboard.py +0 -0
  230. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/quant_check.py +0 -0
  231. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/experiment/__init__.py +0 -0
  232. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/experiment/tracker.py +0 -0
  233. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/migrate/__init__.py +0 -0
  234. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/migrate/axolotl.py +0 -0
  235. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/migrate/common.py +0 -0
  236. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/migrate/llamafactory.py +0 -0
  237. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/migrate/unsloth.py +0 -0
  238. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/monitoring/__init__.py +0 -0
  239. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/monitoring/callback.py +0 -0
  240. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
  241. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/monitoring/display.py +0 -0
  242. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
  243. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/monitoring/hf_push.py +0 -0
  244. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/monitoring/plugin_callback.py +0 -0
  245. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/monitoring/trace_logger.py +0 -0
  246. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/plugins/__init__.py +0 -0
  247. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/py.typed +0 -0
  248. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/recipes/__init__.py +0 -0
  249. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/recipes/catalog.py +0 -0
  250. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/registry/__init__.py +0 -0
  251. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/registry/attach.py +0 -0
  252. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/registry/diff.py +0 -0
  253. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/registry/hashing.py +0 -0
  254. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/registry/store.py +0 -0
  255. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/__init__.py +0 -0
  256. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/audio.yaml +0 -0
  257. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/bco.yaml +0 -0
  258. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/chat.yaml +0 -0
  259. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/code.yaml +0 -0
  260. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/embedding.yaml +0 -0
  261. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
  262. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
  263. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
  264. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/ipo.yaml +0 -0
  265. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/kto.yaml +0 -0
  266. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/longcontext.yaml +0 -0
  267. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/manifest.json +0 -0
  268. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/medical.yaml +0 -0
  269. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/moe.yaml +0 -0
  270. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/orpo.yaml +0 -0
  271. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/pretrain.yaml +0 -0
  272. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/reasoning.yaml +0 -0
  273. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/rlhf.yaml +0 -0
  274. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/simpo.yaml +0 -0
  275. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/tool-calling.yaml +0 -0
  276. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/vision.yaml +0 -0
  277. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/__init__.py +0 -0
  278. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/bco.py +0 -0
  279. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/bitnet.py +0 -0
  280. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/classifier.py +0 -0
  281. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/distill.py +0 -0
  282. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/dpo.py +0 -0
  283. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/embedding.py +0 -0
  284. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/ipo.py +0 -0
  285. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/kto.py +0 -0
  286. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/mlx_dpo.py +0 -0
  287. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/mlx_grpo.py +0 -0
  288. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/mlx_routing.py +0 -0
  289. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/mlx_sft.py +0 -0
  290. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/mole_routing.py +0 -0
  291. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/orpo.py +0 -0
  292. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/ppo.py +0 -0
  293. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/preference.py +0 -0
  294. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/pretrain.py +0 -0
  295. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/prm.py +0 -0
  296. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/raft.py +0 -0
  297. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/reward_model.py +0 -0
  298. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/rewards.py +0 -0
  299. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/sft.py +0 -0
  300. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/simpo.py +0 -0
  301. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/unlearn.py +0 -0
  302. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/tui_app.py +0 -0
  303. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/ui/__init__.py +0 -0
  304. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/ui/app.py +0 -0
  305. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/ui/plugins/__init__.py +0 -0
  306. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/ui/static/app.js +0 -0
  307. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/ui/static/index.html +0 -0
  308. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/ui/static/logo.png +0 -0
  309. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/ui/static/logo.svg +0 -0
  310. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/ui/static/style.css +0 -0
  311. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/__init__.py +0 -0
  312. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/_eval_text.py +0 -0
  313. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ab_test.py +0 -0
  314. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/activation_offload.py +0 -0
  315. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/active_sampler.py +0 -0
  316. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/adapter_bisect.py +0 -0
  317. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/adapter_branch.py +0 -0
  318. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/adapter_diff.py +0 -0
  319. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/adapter_merge.py +0 -0
  320. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/adapter_pr.py +0 -0
  321. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/adapter_scan.py +0 -0
  322. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/adapter_sign.py +0 -0
  323. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/advise.py +0 -0
  324. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/advise_history.py +0 -0
  325. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/agent_forge.py +0 -0
  326. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/agent_sandbox.py +0 -0
  327. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/airgap_bundle.py +0 -0
  328. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/annex_xi.py +0 -0
  329. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/anthropic_messages.py +0 -0
  330. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/attest.py +0 -0
  331. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/audit_log.py +0 -0
  332. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/auto_quant.py +0 -0
  333. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/backend_detect.py +0 -0
  334. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/batch_probe.py +0 -0
  335. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/behavior_battery.py +0 -0
  336. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/bitnet.py +0 -0
  337. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/blame.py +0 -0
  338. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/block_expansion.py +0 -0
  339. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/bom.py +0 -0
  340. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/brain_rot.py +0 -0
  341. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/brain_rot_lang.py +0 -0
  342. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/build_dag.py +0 -0
  343. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/canary_discovery.py +0 -0
  344. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/canary_router.py +0 -0
  345. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/capability_suite.py +0 -0
  346. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/checklist_dsl.py +0 -0
  347. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
  348. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/citation_faithful.py +0 -0
  349. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/classifier.py +0 -0
  350. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/cmaes_merge.py +0 -0
  351. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/compile_tools.py +0 -0
  352. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/completions.py +0 -0
  353. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/constants.py +0 -0
  354. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/convergence.py +0 -0
  355. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/crash.py +0 -0
  356. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/cross_doc_attn.py +0 -0
  357. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/curriculum.py +0 -0
  358. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
  359. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/cut_ce.py +0 -0
  360. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/data_forge.py +0 -0
  361. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/data_mix.py +0 -0
  362. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/data_pipeline.py +0 -0
  363. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/data_score.py +0 -0
  364. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/deepspeed.py +0 -0
  365. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/demo_bundles.py +0 -0
  366. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/deploy_autopilot.py +0 -0
  367. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/__init__.py +0 -0
  368. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/_common.py +0 -0
  369. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/badge.py +0 -0
  370. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/citation.py +0 -0
  371. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/contamination.py +0 -0
  372. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
  373. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/format.py +0 -0
  374. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/live.py +0 -0
  375. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/memorization.py +0 -0
  376. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
  377. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/refusal.py +0 -0
  378. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/report.py +0 -0
  379. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/runner.py +0 -0
  380. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/distill.py +0 -0
  381. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/dpo_variants.py +0 -0
  382. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/drift_alarm.py +0 -0
  383. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ebft_gdpo.py +0 -0
  384. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/echo_trap.py +0 -0
  385. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/edit_diff.py +0 -0
  386. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/edit_governor.py +0 -0
  387. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/edit_kernels.py +0 -0
  388. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/encoding.py +0 -0
  389. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/energy.py +0 -0
  390. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/env_lock.py +0 -0
  391. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/errors.py +0 -0
  392. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/eval_design.py +0 -0
  393. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/eval_gate_hook.py +0 -0
  394. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
  395. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/expectations.py +0 -0
  396. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/fetch_examples.py +0 -0
  397. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/flash_attn.py +0 -0
  398. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/fp8.py +0 -0
  399. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/freeze.py +0 -0
  400. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/fsdp.py +0 -0
  401. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
  402. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/galore.py +0 -0
  403. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/gguf_quant.py +0 -0
  404. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/gpu.py +0 -0
  405. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/gpu_monitor.py +0 -0
  406. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/grace_codebook.py +0 -0
  407. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/graceful_save.py +0 -0
  408. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/grad_accum.py +0 -0
  409. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/gradient_ckpt.py +0 -0
  410. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/grpo_variants.py +0 -0
  411. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/hardware_fit.py +0 -0
  412. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/harm_probe.py +0 -0
  413. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/hf.py +0 -0
  414. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/hf_space.py +0 -0
  415. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/hubs.py +0 -0
  416. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ingest_sources.py +0 -0
  417. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/integrations.py +0 -0
  418. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/interference.py +0 -0
  419. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/interference_live.py +0 -0
  420. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/irt.py +0 -0
  421. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/iterative_dpo.py +0 -0
  422. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/jinja_analyzer.py +0 -0
  423. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/kernel_picker.py +0 -0
  424. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/knowledge_edit.py +0 -0
  425. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/kv_cache.py +0 -0
  426. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/launcher.py +0 -0
  427. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/license_advisor.py +0 -0
  428. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/license_matrix.py +0 -0
  429. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/liger.py +0 -0
  430. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/live_eval.py +0 -0
  431. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/llama_proxy.py +0 -0
  432. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/llama_server_timings.py +0 -0
  433. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/local_rl.py +0 -0
  434. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
  435. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/loftq_init.py +0 -0
  436. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/log_level.py +0 -0
  437. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/long_context.py +0 -0
  438. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/longlora.py +0 -0
  439. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/loop_budget.py +0 -0
  440. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/loop_daemon.py +0 -0
  441. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/loop_iteration.py +0 -0
  442. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/loop_stages.py +0 -0
  443. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/loop_state.py +0 -0
  444. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/lr_finder.py +0 -0
  445. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/lr_groups.py +0 -0
  446. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/magpie.py +0 -0
  447. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/metrics.py +0 -0
  448. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/mii.py +0 -0
  449. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/mix_proxy.py +0 -0
  450. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/mixed_precision.py +0 -0
  451. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/mlx.py +0 -0
  452. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/mod.py +0 -0
  453. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/moe.py +0 -0
  454. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/moe_quant.py +0 -0
  455. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/multipack.py +0 -0
  456. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/multipack_sampler.py +0 -0
  457. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/multipack_trainer.py +0 -0
  458. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/namespace_pin.py +0 -0
  459. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/neat_packing.py +0 -0
  460. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ngram_spec.py +0 -0
  461. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/nlg_metrics.py +0 -0
  462. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ollama.py +0 -0
  463. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/onboarding.py +0 -0
  464. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/optimizer_zoo.py +0 -0
  465. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/paths.py +0 -0
  466. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/peft_builder.py +0 -0
  467. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/peft_patches.py +0 -0
  468. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/peft_wiring.py +0 -0
  469. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/persona_hub.py +0 -0
  470. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/pipeline.py +0 -0
  471. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/preference_combine.py +0 -0
  472. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/prm.py +0 -0
  473. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/probe_kernel.py +0 -0
  474. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/probe_pack.py +0 -0
  475. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/profiler.py +0 -0
  476. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/profiling.py +0 -0
  477. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/profiling_v0_43.py +0 -0
  478. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/prompt_compile.py +0 -0
  479. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/prompt_distill.py +0 -0
  480. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/prune_prompt.py +0 -0
  481. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/qat.py +0 -0
  482. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/qr_url.py +0 -0
  483. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/quality.py +0 -0
  484. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/quant_menu.py +0 -0
  485. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ra_dit.py +0 -0
  486. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ra_dit_run.py +0 -0
  487. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/raft.py +0 -0
  488. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/reasoning_effort.py +0 -0
  489. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/reasoning_parser.py +0 -0
  490. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/recipe_dag.py +0 -0
  491. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/recipe_run.py +0 -0
  492. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/registry.py +0 -0
  493. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/relora.py +0 -0
  494. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/replay.py +0 -0
  495. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/repro_receipt.py +0 -0
  496. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/reward_hacking.py +0 -0
  497. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ring_attention.py +0 -0
  498. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/rl_checkpoint.py +0 -0
  499. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
  500. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/run_cost.py +0 -0
  501. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/sae_diff.py +0 -0
  502. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/save_formats.py +0 -0
  503. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/server_tools.py +0 -0
  504. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/sglang.py +0 -0
  505. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/shortcuts.py +0 -0
  506. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/signing.py +0 -0
  507. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/sleeper_probe.py +0 -0
  508. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/soup_lock.py +0 -0
  509. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/spec_pairing.py +0 -0
  510. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/spike_recovery.py +0 -0
  511. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/sse_train_stream.py +0 -0
  512. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/steering.py +0 -0
  513. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/strict_safetensors.py +0 -0
  514. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/structured_output.py +0 -0
  515. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/sweep_config.py +0 -0
  516. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/tail_latency.py +0 -0
  517. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/terraform_plan.py +0 -0
  518. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/tool_outputs.py +0 -0
  519. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/topology.py +0 -0
  520. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/tracing.py +0 -0
  521. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/trackers.py +0 -0
  522. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/train_event_buffer.py +0 -0
  523. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/trainer_plugins.py +0 -0
  524. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/trust_remote.py +0 -0
  525. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/truth_probe.py +0 -0
  526. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/tts.py +0 -0
  527. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/tunability.py +0 -0
  528. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ui_env.py +0 -0
  529. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/uld.py +0 -0
  530. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/unlearn_kernels.py +0 -0
  531. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/unlearning.py +0 -0
  532. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/unlearning_eval.py +0 -0
  533. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/unsloth.py +0 -0
  534. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/vector_bank.py +0 -0
  535. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/vscode_setup.py +0 -0
  536. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/warmup.py +0 -0
  537. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/webhooks.py +0 -0
  538. {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/why.py +0 -0
  539. {soup_cli-0.71.20 → soup_cli-0.71.22}/templates/chat.yaml +0 -0
  540. {soup_cli-0.71.20 → soup_cli-0.71.22}/templates/code.yaml +0 -0
  541. {soup_cli-0.71.20 → soup_cli-0.71.22}/templates/medical.yaml +0 -0
  542. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/__init__.py +0 -0
  543. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/conftest.py +0 -0
  544. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/qa/v053_qa.md +0 -0
  545. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/qa/v07114_qa.md +0 -0
  546. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/qa/v0716_qa.md +0 -0
  547. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_adapters.py +0 -0
  548. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_advanced_peft.py +0 -0
  549. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_assistant_mask.py +0 -0
  550. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_audio.py +0 -0
  551. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_auto_tuning.py +0 -0
  552. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_autopilot.py +0 -0
  553. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_awq_gptq_export.py +0 -0
  554. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_batch_probe.py +0 -0
  555. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_bco.py +0 -0
  556. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_bench.py +0 -0
  557. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_brain_rot_multilingual.py +0 -0
  558. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_bugfixes.py +0 -0
  559. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_build_dag.py +0 -0
  560. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_callback.py +0 -0
  561. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_cans.py +0 -0
  562. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_chat.py +0 -0
  563. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_chat_template.py +0 -0
  564. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_cli.py +0 -0
  565. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_cli_subprocess.py +0 -0
  566. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_config.py +0 -0
  567. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_cost.py +0 -0
  568. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_crash_reporter.py +0 -0
  569. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_curriculum.py +0 -0
  570. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_data.py +0 -0
  571. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_data_augment.py +0 -0
  572. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_data_sample.py +0 -0
  573. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_data_split.py +0 -0
  574. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_data_tools.py +0 -0
  575. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_dataset_hub.py +0 -0
  576. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_dataset_registry.py +0 -0
  577. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_deepspeed.py +0 -0
  578. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_deploy_ollama.py +0 -0
  579. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_diff.py +0 -0
  580. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_display.py +0 -0
  581. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_doctor.py +0 -0
  582. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_dpo_example.py +0 -0
  583. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_dpo_variants.py +0 -0
  584. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_embedding.py +0 -0
  585. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_errors.py +0 -0
  586. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_eval.py +0 -0
  587. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_eval_gate.py +0 -0
  588. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_eval_platform.py +0 -0
  589. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_export.py +0 -0
  590. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_formats.py +0 -0
  591. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_fp8_recipe.py +0 -0
  592. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_freeze_training.py +0 -0
  593. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_generate.py +0 -0
  594. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_gpu.py +0 -0
  595. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_grpo.py +0 -0
  596. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_hf_integration.py +0 -0
  597. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_infer.py +0 -0
  598. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_inference_advanced.py +0 -0
  599. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_init.py +0 -0
  600. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_ipo.py +0 -0
  601. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_jinja_analyzer.py +0 -0
  602. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_kto.py +0 -0
  603. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_loader.py +0 -0
  604. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_log_level.py +0 -0
  605. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_loss_watchdog.py +0 -0
  606. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_merge.py +0 -0
  607. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_migrate.py +0 -0
  608. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_mlx_backend.py +0 -0
  609. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_moe.py +0 -0
  610. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_multi_adapter.py +0 -0
  611. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_multi_gpu.py +0 -0
  612. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_multipack_config.py +0 -0
  613. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_multipack_invariants.py +0 -0
  614. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_multipack_sampler.py +0 -0
  615. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_neat_packing.py +0 -0
  616. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_neftune_rslora.py +0 -0
  617. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_onnx_tensorrt_export.py +0 -0
  618. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_orpo.py +0 -0
  619. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_packing.py +0 -0
  620. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_part_a_wave1.py +0 -0
  621. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_part_a_wave2.py +0 -0
  622. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_part_b.py +0 -0
  623. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_part_c.py +0 -0
  624. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_part_d.py +0 -0
  625. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_part_e.py +0 -0
  626. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_part_f_hardening.py +0 -0
  627. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_peft_methods.py +0 -0
  628. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_peft_patches.py +0 -0
  629. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_performance.py +0 -0
  630. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_pissa_init.py +0 -0
  631. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_ppo.py +0 -0
  632. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_preference_dispatcher.py +0 -0
  633. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_preference_multi.py +0 -0
  634. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_preference_multi_runtime.py +0 -0
  635. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_pretrain.py +0 -0
  636. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_profile.py +0 -0
  637. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_profiling.py +0 -0
  638. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_progress.py +0 -0
  639. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_push.py +0 -0
  640. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_qat.py +0 -0
  641. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_quality_filter.py +0 -0
  642. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_quant_check.py +0 -0
  643. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_quant_menu.py +0 -0
  644. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_quickstart.py +0 -0
  645. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_rank_pattern.py +0 -0
  646. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_recipes.py +0 -0
  647. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_recipes_v031.py +0 -0
  648. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_refusal_multilingual.py +0 -0
  649. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_registry.py +0 -0
  650. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_relora.py +0 -0
  651. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_replay.py +0 -0
  652. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_resume.py +0 -0
  653. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_rlvr.py +0 -0
  654. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_run_cost.py +0 -0
  655. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_runs.py +0 -0
  656. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_serve.py +0 -0
  657. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_server_generate.py +0 -0
  658. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_sglang_serve.py +0 -0
  659. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_simpo.py +0 -0
  660. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_smoke_train.py +0 -0
  661. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_speculative_decoding.py +0 -0
  662. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_sweep.py +0 -0
  663. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_synth_data_pro.py +0 -0
  664. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_templates_yaml.py +0 -0
  665. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_tensorboard.py +0 -0
  666. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_tool_calling.py +0 -0
  667. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_trace_to_pref.py +0 -0
  668. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_tracker.py +0 -0
  669. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_trainer_coverage_v035.py +0 -0
  670. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_trainer_init.py +0 -0
  671. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_training_intelligence.py +0 -0
  672. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_training_speed.py +0 -0
  673. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_trust_remote_code.py +0 -0
  674. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_tui.py +0 -0
  675. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_ui.py +0 -0
  676. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_ui_chat.py +0 -0
  677. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_ui_config_builder.py +0 -0
  678. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_ui_live_monitor.py +0 -0
  679. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_ui_metrics.py +0 -0
  680. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_unsloth.py +0 -0
  681. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0401_part_c.py +0 -0
  682. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0401_part_d.py +0 -0
  683. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0401_part_e.py +0 -0
  684. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0402_part_a.py +0 -0
  685. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0402_part_b.py +0 -0
  686. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0403_part_a.py +0 -0
  687. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0403_part_b.py +0 -0
  688. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0403_part_c.py +0 -0
  689. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0404_part_a.py +0 -0
  690. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0404_part_b.py +0 -0
  691. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0405_part_a.py +0 -0
  692. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0406_part_a.py +0 -0
  693. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0410_part_a.py +0 -0
  694. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0410_part_b.py +0 -0
  695. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0410_part_c.py +0 -0
  696. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0420.py +0 -0
  697. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0430_part_a.py +0 -0
  698. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0430_part_b.py +0 -0
  699. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0430_part_c.py +0 -0
  700. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0430_part_d.py +0 -0
  701. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0440_part_a.py +0 -0
  702. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0440_part_b.py +0 -0
  703. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0440_part_c.py +0 -0
  704. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0440_review_followups.py +0 -0
  705. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0450.py +0 -0
  706. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0460_part_a.py +0 -0
  707. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0460_part_b.py +0 -0
  708. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0470_part_a.py +0 -0
  709. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0470_part_b.py +0 -0
  710. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0480_part_a.py +0 -0
  711. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0480_part_b.py +0 -0
  712. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0490.py +0 -0
  713. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0500_part_a.py +0 -0
  714. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0500_part_d.py +0 -0
  715. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0500_part_e.py +0 -0
  716. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0510.py +0 -0
  717. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0520.py +0 -0
  718. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v05310.py +0 -0
  719. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v05311.py +0 -0
  720. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0531_109.py +0 -0
  721. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0531_139.py +0 -0
  722. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0531_142.py +0 -0
  723. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0531_82.py +0 -0
  724. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0532.py +0 -0
  725. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0533.py +0 -0
  726. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0534.py +0 -0
  727. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0535.py +0 -0
  728. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0536.py +0 -0
  729. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0537.py +0 -0
  730. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0538.py +0 -0
  731. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0539.py +0 -0
  732. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0540.py +0 -0
  733. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0550.py +0 -0
  734. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0550_followups.py +0 -0
  735. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0560.py +0 -0
  736. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0570_part_a.py +0 -0
  737. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0570_part_b.py +0 -0
  738. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0570_part_c.py +0 -0
  739. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0570_part_d.py +0 -0
  740. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0580.py +0 -0
  741. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0590.py +0 -0
  742. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0600_part_a.py +0 -0
  743. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0600_part_b.py +0 -0
  744. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0600_part_c.py +0 -0
  745. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0600_part_d.py +0 -0
  746. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0600_part_e.py +0 -0
  747. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0600_part_f.py +0 -0
  748. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0610_part_a.py +0 -0
  749. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0610_part_b.py +0 -0
  750. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0610_part_c.py +0 -0
  751. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0610_part_d.py +0 -0
  752. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0610_part_e.py +0 -0
  753. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0620_followups.py +0 -0
  754. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0620_part_a.py +0 -0
  755. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0620_part_b.py +0 -0
  756. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0620_part_c.py +0 -0
  757. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0620_part_d.py +0 -0
  758. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0620_part_e.py +0 -0
  759. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0630_followups.py +0 -0
  760. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0630_part_a.py +0 -0
  761. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0630_part_b.py +0 -0
  762. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0630_part_c.py +0 -0
  763. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0630_part_d.py +0 -0
  764. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0630_part_e.py +0 -0
  765. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0631_206.py +0 -0
  766. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0640_followups.py +0 -0
  767. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0640_part_a.py +0 -0
  768. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0640_part_b.py +0 -0
  769. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0640_part_c.py +0 -0
  770. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0640_part_d.py +0 -0
  771. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0640_part_e.py +0 -0
  772. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0640_part_f.py +0 -0
  773. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0650_followups.py +0 -0
  774. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0650_part_a.py +0 -0
  775. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0650_part_b.py +0 -0
  776. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0650_part_c.py +0 -0
  777. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0650_part_d.py +0 -0
  778. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0650_part_e.py +0 -0
  779. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0660_cli.py +0 -0
  780. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0660_followups.py +0 -0
  781. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0660_part_a.py +0 -0
  782. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0660_part_b.py +0 -0
  783. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0660_part_c.py +0 -0
  784. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0660_part_d.py +0 -0
  785. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0660_part_e.py +0 -0
  786. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0670_followups.py +0 -0
  787. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0670_part_a.py +0 -0
  788. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0670_part_b.py +0 -0
  789. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0670_part_c.py +0 -0
  790. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0670_part_d.py +0 -0
  791. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0670_part_e.py +0 -0
  792. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0670_part_f.py +0 -0
  793. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0680_followups.py +0 -0
  794. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0680_part_a.py +0 -0
  795. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0680_part_b.py +0 -0
  796. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0680_part_c.py +0 -0
  797. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0680_part_e.py +0 -0
  798. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0690_part_a.py +0 -0
  799. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0690_part_b.py +0 -0
  800. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0690_part_c.py +0 -0
  801. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0690_part_d.py +0 -0
  802. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0690_part_e.py +0 -0
  803. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0700_part_a.py +0 -0
  804. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0700_part_b.py +0 -0
  805. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0700_part_c.py +0 -0
  806. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0700_part_d.py +0 -0
  807. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0700_part_e.py +0 -0
  808. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0700_part_f.py +0 -0
  809. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07110.py +0 -0
  810. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07111.py +0 -0
  811. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07112.py +0 -0
  812. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07113.py +0 -0
  813. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07114.py +0 -0
  814. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07115.py +0 -0
  815. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07116.py +0 -0
  816. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07117.py +0 -0
  817. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07118.py +0 -0
  818. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07119.py +0 -0
  819. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0712.py +0 -0
  820. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0713.py +0 -0
  821. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0714.py +0 -0
  822. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0715.py +0 -0
  823. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0716.py +0 -0
  824. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0717.py +0 -0
  825. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0718.py +0 -0
  826. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0719.py +0 -0
  827. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_validator.py +0 -0
  828. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_vision.py +0 -0
  829. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_vllm_serve.py +0 -0
  830. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_why.py +0 -0
  831. {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_windows_encoding.py +0 -0
@@ -12,6 +12,123 @@ reproducing 70+ versions of notes.
12
12
 
13
13
  ## [Unreleased]
14
14
 
15
+ ## [0.71.22] - 2026-06-10
16
+
17
+ ### Added
18
+ - **Perf & measure polish** — a 4-issue patch tightening four live paths from
19
+ the recent BETA lifts. Pure code, validated on Windows + RTX 3050.
20
+ - **MiniLLM on-policy KV-cache (closes #263).** The on-policy distillation
21
+ rollout (`soup train` with `training.minillm_on_policy: true`) now threads
22
+ `past_key_values` so each step forwards only the new token instead of
23
+ re-feeding the whole prefix — resolving the O(L²) per-step cost from
24
+ v0.71.18. A LoRA student (the common distill case) activates the cache
25
+ too: the new `_supports_kv_cache` probe unwraps the PEFT model via
26
+ `get_base_model()` before deciding. The teacher is always cached; the
27
+ student cache respects the retained autograd graph and degrades gracefully
28
+ if a model returns no cache mid-loop.
29
+ - **`soup serve --mole` KV-cache (closes #262).** Each of the N task adapters
30
+ in a served MoLE now keeps its own KV cache in lockstep, created fresh per
31
+ `generate()` call (never stored on the instance, so there is no
32
+ cross-request leak). Top-k zero-weight adapters are still skipped, and the
33
+ output is byte-identical to the no-cache path on a real MoLE.
34
+ - **Deploy-autopilot live measure factories (closes #143).** `soup deploy
35
+ autopilot --measure` ships a first-party transformers loader factory (lazy
36
+ import, per-candidate quant config via the Quant Menu loader; `before` =
37
+ base, `after` = quantised) replacing the inject-only test hooks. The
38
+ baseline is now scored **once** and the whole candidate list is
39
+ **pre-validated up front**, so a typo in `--measure-candidates` raises
40
+ before any model load instead of burning N live loads or doubling peak
41
+ VRAM.
42
+ - **Live-codec TTS via SNAC, partial (#265-partial).** The live-codec
43
+ encode path (`data.format='audio'`) is validated for **Orpheus**:
44
+ `load_audio_mono` now probes `soundfile.info` (duration + byte cap)
45
+ *before* `soundfile.read` (no multi-GB decode into RAM) and reads through
46
+ an `O_NOFOLLOW` file descriptor; a real SNAC-backed encode of a 24 kHz wav
47
+ produced 42 Orpheus codec tokens.
48
+
49
+ ### Fixed
50
+ - MiniLLM on-policy KV-cache was silently disabled for LoRA students (the
51
+ PEFT wrapper hid the base model's `past_key_values` support) — now probed
52
+ via `get_base_model()`.
53
+ - Deploy-measure no longer re-scores the baseline once per candidate or burns
54
+ live model loads on a bad candidate (per-candidate validation moved up front).
55
+ - `load_audio_mono` capped audio duration only *after* decoding into RAM —
56
+ the cap is now checked from `soundfile.info` before reading.
57
+
58
+ ### Known limitations
59
+ - KV-cache correctness is validated (cache == no-cache equality on real tiny
60
+ artifacts) but large-model throughput gains were not measured on the 4 GB
61
+ dev box.
62
+ - **#265 stays open** — the live-codec `data.format='audio'` SNAC encode path
63
+ is validated for Orpheus only; the other four TTS families keep their
64
+ per-family codec dependency gate.
65
+ - The deploy-measure first-party factory's real quantized (bitsandbytes 4-bit)
66
+ load is CUDA + bitsandbytes-gated; on Windows / no-bnb the injected test
67
+ seams are the validated path.
68
+ - The MoLE serve KV-cache assumes single-sequence (`B == 1`) decode.
69
+
70
+ ## [0.71.21] - 2026-06-10
71
+
72
+ ### Added
73
+ - **Precision & rollout lift (BETA, hw-gated)** — lifts five deferred
74
+ `NotImplementedError` stubs to live code.
75
+ - **FP8 attention + NVFP4 (closes #141).** `training.fp8_attention: true`
76
+ now converts the model's attention projections (q/k/v/o + fused qkv
77
+ variants) to FP8 training modules via torchao's
78
+ `convert_to_float8_training` with an attention-only `module_filter_fn`
79
+ (Hopper SM ≥ 9.0 gate); `training.nvfp4: true` quantises via torchao's
80
+ `NVFP4Config` (Blackwell SM ≥ 10.0 gate). Both are wired into the v0.28
81
+ speed/memory pipeline and degrade to a visible yellow advisory when the
82
+ gate fires — a conversion failing partway raises an honest "model may be
83
+ PARTIALLY converted" error rather than silently training on a
84
+ half-converted model.
85
+ - **vLLM sleep mode (closes #124).** `training.vllm_sleep_mode: true` is
86
+ live: `create_vllm_engine(sleep_mode=True)` sets
87
+ `AsyncEngineArgs.enable_sleep_mode` (vLLM ≥ 0.7 gate with a friendly
88
+ upgrade message), the new `vllm_sleep_cycle(engine, level=1|2)` context
89
+ manager wraps the optimisation step (wake in `finally`), and the GRPO
90
+ trainer threads the flag into TRL's `GRPOConfig` when the installed TRL
91
+ exposes the hook (advisory otherwise).
92
+ - **Multi-turn agent rollout launchers (closes #125).** `soup train` with
93
+ `task: grpo` + `training.rollout_backend: openenv` +
94
+ `training.rollout_func: my_module:fn` now runs a LIVE rollout: the
95
+ resolver imports the operator's callable (same trusted-code policy as
96
+ `data.prompt_strategy`), feeds it the dataset prompts as seeds, and the
97
+ returned `{prompt, answer?}` rows replace the prompt dataset. Rows are
98
+ normalised (extra keys stripped, message-list prompts deep-copied,
99
+ non-string answers rejected loudly). `art` / `ruler` / `nemo_gym` raise a
100
+ friendly ImportError when the backend package is missing and an honest
101
+ BETA gate when present (injectable `_EXTERNAL_ROLLOUT_RUNNERS` seam).
102
+ Validated by a real GRPO + openenv rollout train on SmolLM2-135M.
103
+ - **Apple-adapter conversion (closes #228).** `soup apple-adapter` is live
104
+ for `hf-to-mlx` / `mlx-to-hf`: PEFT LoRA safetensors ↔ mlx-lm adapters
105
+ with both matrices transposed (`lora_A [r,in]` ↔ `lora_a [in,r]`),
106
+ bf16 sources upcast via the torch loader, `adapters.safetensors` +
107
+ `num_layers` emitted for mlx-lm's `load_adapters`, rank/alpha/dropout
108
+ carried through, legacy `adapters.npz` still read, optional v0.60
109
+ Merkle-root signing. The `*-to-apple` directions stay upstream-gated
110
+ (no published FoundationModels adapter spec). Validated by a real bf16
111
+ PEFT adapter round-tripping with numeric equality.
112
+ - **Llama-4 expert delinearization (closes #97).** `soup
113
+ delinearize-llama4` now runs a live torch runtime: fused 2-D expert
114
+ tensors `[E*dim_in, dim_out]` reshape to 3-D `[E, dim_in, dim_out]`
115
+ (expert count from `config.json` or `--num-experts`), other tensors pass
116
+ through, JSON sidecars are copied, writes are atomic. `--plan-only`
117
+ keeps the old render-and-exit flow.
118
+
119
+ ### Fixed
120
+ - `safetensors.numpy.save` silently mangles non-contiguous (transposed)
121
+ arrays — the apple-adapter writer now makes every array C-contiguous
122
+ first (caught by the new round-trip assertions).
123
+
124
+ ### Known limitations
125
+ - fp8_attention / nvfp4 / vllm_sleep_mode are BETA hardware-gated — the
126
+ converters and gates ship validated via capability probes and fake-module
127
+ dispatch tests, but end-to-end runs need a Hopper/Blackwell GPU + torchao
128
+ (or vLLM ≥ 0.7), none of which exist on the maintainer's RTX 3050 /
129
+ Windows box. The `art` / `ruler` / `nemo_gym` rollout adapters are
130
+ honestly BETA-gated until validated against the upstream packages.
131
+
15
132
  ## [0.71.20] - 2026-06-09
16
133
 
17
134
  ### 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 (291 files, 13874 tests)
123
+ tests/ - Test suite (293 files, 14184 tests)
124
124
  examples/ - Real-world config examples and datasets
125
125
  ```
126
126
 
@@ -150,7 +150,7 @@ pytest tests/test_data.py::test_detect_alpaca_format -v
150
150
  pytest tests/ --cov=soup_cli --cov-report=html
151
151
  ```
152
152
 
153
- ### Test Files (287 files)
153
+ ### Test Files (293 files)
154
154
 
155
155
  > A representative sample of the suite below. The full table lives in
156
156
  > [`.claude/CLAUDE.md`](.claude/CLAUDE.md); run `pytest tests/ -v` for the complete list.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: soup-cli
3
- Version: 0.71.20
3
+ Version: 0.71.22
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
@@ -189,20 +189,22 @@ infrastructure instead of improving models. Soup fixes that.
189
189
 
190
190
  ## What's New
191
191
 
192
- **v0.71.20Modality II trainers (BETA, hardware-gated).** Three v0.52.0 schema stubs become real
193
- trainers:
194
-
195
- - **TTS fine-tuning** — `task: tts` now trains a real text-to-speech model. The five families
196
- (Orpheus / Sesame-CSM / Llasa / Spark / Oute) are decoder LMs, so a TTS fine-tune is next-token
197
- cross-entropy over `[text][audio-codec-token]` chat sequences. Pre-encode your audio to codec tokens
198
- offline and train with `data.format: chat`Soup adds per-family emotion control + codec
199
- special-token registration. (The encode-at-train-time path is dependency-gated on each family's codec.)
200
- - **BitNet 1.58-bit** — `soup export --format bitnet | tq1_0` runs a real llama.cpp TQ1_0 ternary
201
- export, and `quantization: bitnet_1.58` routes to a live BitNet trainer (gated on `onebitllms`).
202
- - **MoE expert quant** `training.moe_expert_quant: nf4 | int8_rowwise` quantizes just the
203
- fused-MoE expert layers with bitsandbytes (attention + router stay full precision), and
204
- `training.train_router_only: true` freezes the experts to train only the gating router. Validated
205
- live on an RTX 3050.
192
+ **v0.71.22Perf & measure polish.** Four live paths from the recent BETA lifts get tighter:
193
+
194
+ - **MiniLLM on-policy distillation is fast** — the on-policy rollout
195
+ (`training.minillm_on_policy: true`) now threads a KV cache so each step forwards only the new
196
+ token instead of re-feeding the whole prefix, resolving the earlier O(L²) cost. A LoRA student
197
+ activates the cache too (the PEFT wrapper is unwrapped before the cache check).
198
+ - **`soup serve --mole` uses a KV cache** each task adapter in a served MoLE keeps its own cache
199
+ in lockstep, created fresh per request (no cross-request leak). Output is byte-identical to the
200
+ previous no-cache path.
201
+ - **`soup deploy autopilot --measure` is real and frugal** a first-party transformers loader
202
+ factory loads each candidate live (per-candidate quant config), scores the baseline **once**, and
203
+ pre-validates the whole `--measure-candidates` list up front, so a typo fails before any model
204
+ load instead of burning N loads or doubling peak VRAM.
205
+ - **Live-codec TTS via SNAC (Orpheus)** — encoding raw audio at train time (`data.format: audio`)
206
+ is validated for Orpheus: audio is duration- and byte-capped from `soundfile.info` **before**
207
+ decoding into RAM, and read through a symlink-safe file descriptor.
206
208
 
207
209
  Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
208
210
 
@@ -49,20 +49,22 @@ infrastructure instead of improving models. Soup fixes that.
49
49
 
50
50
  ## What's New
51
51
 
52
- **v0.71.20Modality II trainers (BETA, hardware-gated).** Three v0.52.0 schema stubs become real
53
- trainers:
54
-
55
- - **TTS fine-tuning** — `task: tts` now trains a real text-to-speech model. The five families
56
- (Orpheus / Sesame-CSM / Llasa / Spark / Oute) are decoder LMs, so a TTS fine-tune is next-token
57
- cross-entropy over `[text][audio-codec-token]` chat sequences. Pre-encode your audio to codec tokens
58
- offline and train with `data.format: chat`Soup adds per-family emotion control + codec
59
- special-token registration. (The encode-at-train-time path is dependency-gated on each family's codec.)
60
- - **BitNet 1.58-bit** — `soup export --format bitnet | tq1_0` runs a real llama.cpp TQ1_0 ternary
61
- export, and `quantization: bitnet_1.58` routes to a live BitNet trainer (gated on `onebitllms`).
62
- - **MoE expert quant** `training.moe_expert_quant: nf4 | int8_rowwise` quantizes just the
63
- fused-MoE expert layers with bitsandbytes (attention + router stay full precision), and
64
- `training.train_router_only: true` freezes the experts to train only the gating router. Validated
65
- live on an RTX 3050.
52
+ **v0.71.22Perf & measure polish.** Four live paths from the recent BETA lifts get tighter:
53
+
54
+ - **MiniLLM on-policy distillation is fast** — the on-policy rollout
55
+ (`training.minillm_on_policy: true`) now threads a KV cache so each step forwards only the new
56
+ token instead of re-feeding the whole prefix, resolving the earlier O(L²) cost. A LoRA student
57
+ activates the cache too (the PEFT wrapper is unwrapped before the cache check).
58
+ - **`soup serve --mole` uses a KV cache** each task adapter in a served MoLE keeps its own cache
59
+ in lockstep, created fresh per request (no cross-request leak). Output is byte-identical to the
60
+ previous no-cache path.
61
+ - **`soup deploy autopilot --measure` is real and frugal** a first-party transformers loader
62
+ factory loads each candidate live (per-candidate quant config), scores the baseline **once**, and
63
+ pre-validates the whole `--measure-candidates` list up front, so a typo fails before any model
64
+ load instead of burning N loads or doubling peak VRAM.
65
+ - **Live-codec TTS via SNAC (Orpheus)** — encoding raw audio at train time (`data.format: audio`)
66
+ is validated for Orpheus: audio is duration- and byte-capped from `soundfile.info` **before**
67
+ decoding into RAM, and read through a symlink-safe file descriptor.
66
68
 
67
69
  Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
68
70
 
@@ -641,10 +641,10 @@ Closed catalog (`MappingProxyType`) of ready-to-edit YAML / JSON. Output path cw
641
641
  ## Llama 4 Delinearizer
642
642
 
643
643
  ```bash
644
- soup delinearize-llama4 ./llama4-checkpoint --target ./out-delinearized --yes
644
+ soup delinearize-llama4 ./llama4-checkpoint --target ./out-delinearized [--num-experts N] [--plan-only]
645
645
  ```
646
646
 
647
- Plans Llama 4 expert-weight reshape for export. v0.44.0 ships the planner; live runtime in v0.44.1. `is_llama4_model` uses a word-boundary regex matching the `is_gemma4_model` pattern — `ungemma-llama-4ish` is rejected.
647
+ LIVE (v0.71.21): reshapes fused Llama-4 expert weights `[E*din, dout]` → `[E, din, dout]` shard-by-shard (atomic writes, per-shard 16 GiB cap, cwd containment) and copies the JSON sidecars so the target stays loadable. The expert count defaults from `config.json` (`text_config.num_local_experts`); pass `--num-experts` when the config doesn't carry it (exit 2 otherwise). `--plan-only` keeps the original preview flow and writes nothing. `is_llama4_model` uses a word-boundary regex matching the `is_gemma4_model` pattern — `ungemma-llama-4ish` is rejected.
648
648
 
649
649
 
650
650
  ## Ctrl+C Graceful Save
@@ -24,6 +24,7 @@ soup push --model ./output --repo user/name Upload to HuggingFace
24
24
  soup push --model ./output --repo user/name --collection user/coll-abc123 Add to HF Collection
25
25
  soup merge --adapter ./output Merge LoRA with base model
26
26
  soup merge-sharded-fsdp-weights ./shards -o merged.safetensors Consolidate FSDP shards into one safetensors (v0.71.14; --plan-only previews)
27
+ 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)
27
28
  soup export --model ./output --format gguf Export to GGUF (Ollama)
28
29
  soup export --model ./output --deploy ollama Export GGUF + auto-deploy to Ollama
29
30
  soup export --model ./output --format onnx Export to ONNX
@@ -225,7 +226,7 @@ soup lock show / soup lock check Show + drift-check (exit 3 on drif
225
226
  soup compile <program.py> --eval <suite> [--optimizer mipro|gepa|textgrad|copro|bootstrap_fewshot] [--plan-only] DSPy / GEPA / TextGrad prompt-program compiler — live (v0.71.13; pip install 'soup-cli[compile]')
226
227
  soup distill-prompt --traces <jsonl> --teacher <m> --student <m> --strategy sft|preference|kl [--provider ollama|anthropic|vllm] [--base-url <url>] [--temperature F] [--max-rows N] Distill prompt-heavy traces via a live teacher (v0.71.13)
227
228
  soup compile-tools <spec.json|yaml> --eval <jsonl> [--optimizer textgrad|gepa] [--plan-only] TextGrad / GEPA tool-schema optimiser — live (v0.71.13; pip install 'soup-cli[compile]')
228
- soup apple-adapter <source-dir> --direction hf-to-mlx|mlx-to-hf|hf-to-apple|mlx-to-apple --output <dir> [--sign] HF / MLX / Apple FoundationModels adapter conversion (v0.68.0)
229
+ soup apple-adapter <source-dir> --direction hf-to-mlx|mlx-to-hf|hf-to-apple|mlx-to-apple --output <dir> [--sign] [--plan-only] PEFT LoRA <-> mlx-lm adapter conversion — live (v0.71.21; *-to-apple upstream-gated exit 3)
229
230
  soup local-rl init --db <path> Create personal-LLM flywheel SQLite schema (v0.68.0)
230
231
  soup local-rl status --db <path> Print interactions / thumbs-up / thumbs-down counters
231
232
  soup local-rl record --db <path> --prompt <q> --response <r> --thumb up|down Append thumbs record
@@ -468,12 +468,13 @@ soup serve --model ./output --kv-cache-type q8_0 # 8-bit quantized KV cache
468
468
  - vLLM / SGLang serve wiring is still tracked under [#140](https://github.com/MakazhanAlpamys/Soup/issues/140) (`infra-blocked`).
469
469
 
470
470
 
471
- ## FP8 Attention + NVFP4 + Native `unsloth_bnb_4bit` (v0.53.0)
471
+ ## FP8 Attention + NVFP4 + Native `unsloth_bnb_4bit`
472
472
 
473
- Three new TrainingConfig bools extend the v0.28.0 FP8 menu:
473
+ Three TrainingConfig bools extend the v0.28.0 FP8 menu. `fp8_attention` and `nvfp4` are LIVE
474
+ torchao converters as of v0.71.21 (hardware-gated):
474
475
 
475
- - `fp8_attention: true` — requires `quantization_aware: fp8` AND a non-MLX backend. Targets axolotl parity for FP8 attention on Hopper+ GPUs.
476
- - `nvfp4: true` — Blackwell-only FP4 training. Gated to non-MLX + `modality: text`; the SM ≥ 12.0 runtime check fires at trainer construction.
476
+ - `fp8_attention: true` — requires `quantization_aware: fp8` AND a non-MLX backend. Converts the attention projections (q/k/v/o and fused variants) to torchao float8 training on Hopper+ GPUs. Missing torchao or a pre-Hopper GPU degrades to a clear advisory; a conversion-phase failure raises an honest "model may be PARTIALLY converted" error instead of training on a half-converted model.
477
+ - `nvfp4: true` — Blackwell-only FP4 training via torchao `NVFP4Config` + `quantize_`. Gated to non-MLX + `modality: text`; the SM ≥ 10 runtime check fires at trainer construction.
477
478
  - `unsloth_bnb_4bit: true` — promotes "Unsloth Dynamic 4-bit" from an implicit `backend=unsloth + quantization=4bit` combo to a named flag. Mutual rejection of inconsistent combos at config load.
478
479
 
479
480
  Cross-validator ordering picks the most actionable error: `quantization_aware='fp8'` prerequisite fires before the MLX rejection on `fp8_attention`, so a YAML missing both surfaces the deeper issue first.
@@ -484,9 +484,10 @@ training:
484
484
  grpo_fp16: true # FP16 RL (unsloth parity)
485
485
  # Long-context + memory-efficient RL
486
486
  long_context_grpo: true # wires Tiled MLP when available
487
- vllm_sleep_mode: true # between-rollouts vLLM standby
488
- # Multi-turn agent rollout
489
- rollout_backend: art # one of: art / ruler / nemo_gym / openenv
487
+ vllm_sleep_mode: true # between-rollouts vLLM standby — LIVE (vLLM >= 0.7)
488
+ # Multi-turn agent rollout — openenv is LIVE: your function's rows replace the prompt dataset
489
+ rollout_backend: openenv # one of: art / ruler / nemo_gym / openenv
490
+ rollout_func: my_module:my_rollout # module:function resolver (openenv; trusted operator code)
490
491
  # Stability / efficiency knobs
491
492
  ref_model_ema_alpha: 0.99 # EMA sync policy → reference
492
493
  replay_buffer_size: 2048
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "soup-cli"
7
- version = "0.71.20"
7
+ version = "0.71.22"
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"
@@ -22,7 +22,7 @@ classifiers = [
22
22
  "Topic :: Scientific/Engineering :: Artificial Intelligence",
23
23
  ]
24
24
  # Core install (`pip install soup-cli`) is intentionally light: the CLI, config
25
- # system, and data tools no PyTorch. v0.71.0 split the heavy training stack
25
+ # system, and data tools — no PyTorch. v0.71.0 split the heavy training stack
26
26
  # (torch / transformers / peft / trl / datasets / bitsandbytes / accelerate)
27
27
  # into the `[train]` extra below.
28
28
  dependencies = [
@@ -35,7 +35,7 @@ dependencies = [
35
35
  ]
36
36
 
37
37
  [project.optional-dependencies]
38
- # v0.71.0 heavy training stack. `pip install 'soup-cli[train]'` to fine-tune.
38
+ # v0.71.0 — heavy training stack. `pip install 'soup-cli[train]'` to fine-tune.
39
39
  # These were core dependencies through v0.70.0; pins are unchanged.
40
40
  train = [
41
41
  "torch>=2.0.0",
@@ -46,7 +46,7 @@ train = [
46
46
  "bitsandbytes>=0.41.0",
47
47
  "accelerate>=0.25.0",
48
48
  ]
49
- # v0.71.0 convenience meta-extra pulling the main optional stacks.
49
+ # v0.71.0 — convenience meta-extra pulling the main optional stacks.
50
50
  all = ["soup-cli[train,serve,ui,data]"]
51
51
  eval = ["lm-eval>=0.4.0"]
52
52
  data = ["datasketch>=1.6.0"]
@@ -74,31 +74,31 @@ sglang = ["sglang>=0.2.0", "fastapi>=0.104.0", "uvicorn>=0.24.0"]
74
74
  mlx = ["mlx>=0.20.0", "mlx-lm>=0.20.0"]
75
75
  cce = ["cut-cross-entropy>=24.10.0"]
76
76
  tui = ["textual>=0.50.0"]
77
- # v0.53.8 #89 bundle MLflow / SwanLab / Trackio for `--tracker` users.
77
+ # v0.53.8 #89 — bundle MLflow / SwanLab / Trackio for `--tracker` users.
78
78
  trackers = ["mlflow>=2.0.0", "swanlab>=0.3.0", "trackio>=0.0.1"]
79
- # v0.53.8 #85 fsspec backends for remote dataset loading (s3 / gs / az / oci).
79
+ # v0.53.8 #85 — fsspec backends for remote dataset loading (s3 / gs / az / oci).
80
80
  remote = ["fsspec>=2024.1.0", "s3fs>=2024.1.0", "gcsfs>=2024.1.0", "adlfs>=2024.1.0"]
81
- # v0.53.10 #150 bundle scikit-optimize so `soup data mix --optimize` runs the
81
+ # v0.53.10 #150 — bundle scikit-optimize so `soup data mix --optimize` runs the
82
82
  # Bayesian-style loop instead of falling back to the v0.48.0 Dirichlet sampler.
83
83
  mix = ["scikit-optimize>=0.9.0"]
84
- # v0.53.10 #113 production-grade data quality: langdetect (language) +
84
+ # v0.53.10 #113 — production-grade data quality: langdetect (language) +
85
85
  # presidio-analyzer (PII). Llama-Guard-3-1B is documented as a manual recipe
86
86
  # (license + ~600 MB weight blob too large to bundle by default).
87
87
  data-pro = ["langdetect>=1.0.9", "presidio-analyzer>=2.2.0"]
88
- # v0.71.2 #179/#185 ed25519 detached signing for `soup attest` / `soup
88
+ # v0.71.2 #179/#185 — ed25519 detached signing for `soup attest` / `soup
89
89
  # adapters sign`. Pure-offline; Sigstore keyless (OIDC + Fulcio/Rekor network)
90
90
  # stays infra-blocked and is NOT bundled here.
91
91
  sign = ["cryptography>=41.0.0"]
92
- # v0.71.3 #181 reportlab PDF rendering for `soup train --annex-xi *.pdf`.
92
+ # v0.71.3 #181 — reportlab PDF rendering for `soup train --annex-xi *.pdf`.
93
93
  pdf = ["reportlab>=4.0.0"]
94
- # v0.71.3 #180 codecarbon offline energy/CO2 measurement for
94
+ # v0.71.3 #180 — codecarbon offline energy/CO2 measurement for
95
95
  # `soup train --track-energy` (offline; no IP-geolocation network call).
96
96
  carbon = ["codecarbon>=2.0.0"]
97
- # v0.71.13 #225/#227 prompt-program / tool-schema compilers
97
+ # v0.71.13 #225/#227 — prompt-program / tool-schema compilers
98
98
  # (`soup compile` / `soup compile-tools`). Lazy-imported with a friendly
99
99
  # ImportError; not installed by default (heavy dependency trees).
100
100
  compile = ["dspy-ai>=2.5.0", "textgrad>=0.1.0", "gepa>=0.0.1"]
101
- # v0.71.18 #16 serverless cloud GPU training (`soup train --cloud modal`).
101
+ # v0.71.18 #16 — serverless cloud GPU training (`soup train --cloud modal`).
102
102
  # Lazy-imported; only needed for `--cloud-submit` (plan-only render needs no
103
103
  # dependency). Modal auth is via `modal setup`.
104
104
  modal = ["modal>=0.60.0"]
@@ -113,7 +113,7 @@ Issues = "https://github.com/MakazhanAlpamys/Soup/issues"
113
113
 
114
114
  [tool.hatch.build.targets.wheel]
115
115
  packages = ["src/soup_cli"]
116
- # v0.53.8 #93 include bundled fixture JSONLs as package data so
116
+ # v0.53.8 #93 — include bundled fixture JSONLs as package data so
117
117
  # `soup data demo` works in zipapp / namespace-package installs.
118
118
  # Hatchling's ``packages = ["src/soup_cli"]`` already recurses into the
119
119
  # package directory, so we use the artifacts directive (NOT
@@ -146,7 +146,7 @@ follow_imports = "silent"
146
146
  testpaths = ["tests"]
147
147
  markers = [
148
148
  "smoke: slow smoke tests that download models and run training (run with: pytest -m smoke)",
149
- "unit: fast isolated tests no subprocess, network, filesystem, or real model load",
149
+ "unit: fast isolated tests — no subprocess, network, filesystem, or real model load",
150
150
  "integration: tests that touch real subprocess, SQLite, filesystem, or HTTP",
151
151
  ]
152
152
  addopts = "-m 'not smoke' --cov=soup_cli --cov-fail-under=77 --cov-report=term-missing:skip-covered"
@@ -0,0 +1,3 @@
1
+ """Soup CLI — Fine-tune and post-train LLMs in one command."""
2
+
3
+ __version__ = "0.71.22"
@@ -61,13 +61,37 @@ def apple_adapter_cmd(
61
61
  if plan_only:
62
62
  return
63
63
 
64
+ # v0.71.21 #228 — live conversion. Exit codes: 2 = validation /
65
+ # missing-input, 3 = upstream-gated (Apple spec not yet public),
66
+ # 1 = missing dependency, 0 = success.
64
67
  try:
65
- convert_apple_adapter(plan)
66
- except NotImplementedError as exc:
68
+ report = convert_apple_adapter(plan)
69
+ except RuntimeError as exc:
67
70
  console.print(
68
71
  Panel(
69
72
  f"[yellow]{escape(str(exc))}[/]",
70
- title="Live apple-adapter deferred",
73
+ title="apple-adapter — upstream-gated",
71
74
  )
72
75
  )
73
76
  raise typer.Exit(3) from exc
77
+ except (ValueError, FileNotFoundError) as exc:
78
+ console.print(f"[red]{escape(str(exc))}[/]")
79
+ raise typer.Exit(2) from exc
80
+ except ImportError as exc:
81
+ console.print(f"[red]{escape(str(exc))}[/]")
82
+ raise typer.Exit(1) from exc
83
+
84
+ skipped_note = (
85
+ f"\nSkipped (non-LoRA): [bold]{len(report.skipped_keys)}[/]"
86
+ if report.skipped_keys
87
+ else ""
88
+ )
89
+ console.print(
90
+ Panel(
91
+ f"Converted LoRA keys: [bold]{report.converted_keys}[/]\n"
92
+ f"Output: [bold]{escape(report.output_dir)}[/]\n"
93
+ f"Signed: [bold]{report.signed}[/]{skipped_note}",
94
+ title="soup apple-adapter — converted",
95
+ border_style="green",
96
+ )
97
+ )
@@ -0,0 +1,105 @@
1
+ """`soup delinearize-llama4` — Llama 4 expert-weight reshape.
2
+
3
+ v0.44.0 shipped the planner; v0.71.21 (#97) lifts the live torch runtime
4
+ (load each shard → reshape fused 2-D expert weights to 3-D → atomic write
5
+ to ``--target``). ``--plan-only`` keeps the old render-and-exit flow.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from typing import Optional
11
+
12
+ import typer
13
+ from rich.console import Console
14
+ from rich.markup import escape
15
+ from rich.panel import Panel
16
+
17
+ from soup_cli.utils.delinearize_llama4 import (
18
+ is_llama4_model,
19
+ plan_delinearize,
20
+ run_delinearize,
21
+ )
22
+
23
+ console = Console()
24
+
25
+
26
+ def delinearize_llama4(
27
+ source_dir: str = typer.Argument(
28
+ ...,
29
+ help="Llama 4 checkpoint directory (containing *.safetensors).",
30
+ ),
31
+ target_dir: str = typer.Option(
32
+ ...,
33
+ "--target",
34
+ "-o",
35
+ help="Destination directory for the delinearized weights (under cwd).",
36
+ ),
37
+ model_id: str = typer.Option(
38
+ None,
39
+ "--model-id",
40
+ help="Optional model id; warn if it doesn't look like a Llama 4 model.",
41
+ ),
42
+ num_experts: Optional[int] = typer.Option(
43
+ None,
44
+ "--num-experts",
45
+ help=(
46
+ "Expert count for the reshape. Defaults to "
47
+ "config.json's num_local_experts."
48
+ ),
49
+ ),
50
+ plan_only: bool = typer.Option(
51
+ False,
52
+ "--plan-only",
53
+ help="Render the plan and exit without reshaping (v0.44.0 flow).",
54
+ ),
55
+ ) -> None:
56
+ """Delinearize Llama 4 fused expert weights to 3-D form.
57
+
58
+ Live since v0.71.21 (#97): reshapes ``...experts.gate_up_proj`` /
59
+ ``...experts.down_proj`` from ``[E*dim_in, dim_out]`` to
60
+ ``[E, dim_in, dim_out]`` and copies JSON sidecars so the target stays
61
+ a loadable checkpoint.
62
+ """
63
+ if model_id is not None and not is_llama4_model(model_id):
64
+ console.print(
65
+ f"[yellow]model id {escape(model_id)} doesn't match the Llama 4 "
66
+ "naming pattern - proceed only if you're sure.[/]"
67
+ )
68
+ try:
69
+ plan = plan_delinearize(source_dir, target_dir)
70
+ except (ValueError, FileNotFoundError) as exc:
71
+ console.print(f"[red]{escape(str(exc))}[/]")
72
+ raise typer.Exit(code=2) from exc
73
+ console.print(
74
+ Panel(
75
+ f"Weight files: {len(plan.weight_files)}\n"
76
+ f"Source dir: {escape(plan.source_dir)}\n"
77
+ f"Target dir: {escape(plan.target_dir)}",
78
+ title="Llama 4 Delinearization Plan",
79
+ border_style="cyan",
80
+ )
81
+ )
82
+ if plan_only:
83
+ return
84
+
85
+ try:
86
+ result = run_delinearize(plan, num_experts=num_experts)
87
+ except (TypeError, ValueError, FileNotFoundError) as exc:
88
+ console.print(f"[red]{escape(str(exc))}[/]")
89
+ raise typer.Exit(code=2) from exc
90
+ except ImportError as exc:
91
+ console.print(f"[red]{escape(str(exc))}[/]")
92
+ raise typer.Exit(code=1) from exc
93
+
94
+ console.print(
95
+ Panel(
96
+ f"Files written: {len(result.files_written)}\n"
97
+ f"Reshaped keys: {result.reshaped_keys}\n"
98
+ f"Already 3-D: {result.already_3d_keys}\n"
99
+ f"Passthrough keys: {result.passthrough_keys}\n"
100
+ f"Sidecars copied: {result.sidecars_copied}\n"
101
+ f"Target dir: {escape(result.target_dir)}",
102
+ title="Llama 4 Delinearization — done",
103
+ border_style="green",
104
+ )
105
+ )
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  import os
6
6
  from pathlib import Path
7
- from typing import TYPE_CHECKING, Callable, List, Optional
7
+ from typing import TYPE_CHECKING, List, Optional
8
8
 
9
9
  import typer
10
10
 
@@ -792,25 +792,21 @@ def _run_deploy_autopilot_measure(
792
792
  f"against {Path(tasks_file).name}...[/]"
793
793
  )
794
794
 
795
- def _placeholder_before(prompt: str) -> str:
796
- # The full v0.46.1 live measurement plumbs in real
797
- # transformers / vllm generators. v0.53.1 ships the orchestrator
798
- # surface; callers / smoke runs can monkeypatch this in.
799
- return ""
800
-
801
- def _placeholder_after_factory(candidate: str) -> Callable[[str], str]:
802
- def _gen(prompt: str) -> str:
803
- return ""
804
- return _gen
805
-
806
- # Pull injected generators if the caller registered them via env (escape
807
- # hatch for tests + advanced operator workflows)
795
+ # Injected generators (test seam / advanced operator workflows) still win;
796
+ # otherwise v0.71.22 #143 first-party transformers factories load the real
797
+ # base (before) + per-candidate Quant-Menu-quantized model (after), lazily
798
+ # on first prompt so a cache hit never loads a model.
808
799
  from soup_cli.utils import deploy_measure as _dm
809
- before_gen = getattr(_dm, "_DEPLOY_MEASURE_BEFORE_GEN", None) or _placeholder_before
810
- after_factory = (
811
- getattr(_dm, "_DEPLOY_MEASURE_AFTER_FACTORY", None)
812
- or _placeholder_after_factory
813
- )
800
+
801
+ injected_before = getattr(_dm, "_DEPLOY_MEASURE_BEFORE_GEN", None)
802
+ injected_after = getattr(_dm, "_DEPLOY_MEASURE_AFTER_FACTORY", None)
803
+ if injected_before is None and injected_after is None:
804
+ console.print(
805
+ "[dim]Using live transformers generators (greedy decode; models "
806
+ "load lazily per candidate)...[/]"
807
+ )
808
+ before_gen = injected_before or _dm.build_before_generator(base)
809
+ after_factory = injected_after or _dm.build_after_generator_factory(base)
814
810
 
815
811
  try:
816
812
  results, cache_hit = run_measure(
@@ -824,10 +820,18 @@ def _run_deploy_autopilot_measure(
824
820
  except (TypeError, ValueError, FileNotFoundError) as exc:
825
821
  console.print(f"[red]Measure failed:[/] {escape(str(exc))}")
826
822
  raise typer.Exit(1) from exc
823
+ except (RuntimeError, ImportError, OSError) as exc:
824
+ # Model-load failures from the live factories (missing quant kernel,
825
+ # OOM, network) — friendly exit, no traceback dump.
826
+ console.print(f"[red]Live measure failed:[/] {escape(str(exc))}")
827
+ raise typer.Exit(1) from exc
827
828
 
828
829
  console.print(render_measure_table(results))
829
830
  if cache_hit:
830
- console.print("[dim](cache hit — re-run with --no-cache to refresh)[/]")
831
+ console.print(
832
+ "[dim](cache hit — delete ~/.soup/deploy_autopilot_cache.json or "
833
+ "change --tasks to refresh)[/]"
834
+ )
831
835
  best = pick_best(results)
832
836
  if best is not None:
833
837
  console.print(