soup-cli 0.75.0__tar.gz → 0.75.1__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 (1168) hide show
  1. {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/workflows/ci.yml +12 -1
  2. {soup_cli-0.75.0 → soup_cli-0.75.1}/CHANGELOG.md +18 -1
  3. {soup_cli-0.75.0 → soup_cli-0.75.1}/PKG-INFO +22 -34
  4. {soup_cli-0.75.0 → soup_cli-0.75.1}/README.md +21 -33
  5. {soup_cli-0.75.0 → soup_cli-0.75.1}/README.tr.md +25 -34
  6. {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/adapters-and-governance.md +2 -1
  7. {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/backends-and-ops.md +14 -1
  8. {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/commands.md +1 -0
  9. {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/evaluation.md +2 -0
  10. {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/performance-and-quantization.md +9 -0
  11. {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/serving-and-export.md +14 -1
  12. {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/training.md +2 -0
  13. {soup_cli-0.75.0 → soup_cli-0.75.1}/pyproject.toml +1 -1
  14. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/__init__.py +1 -1
  15. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cans/run.py +24 -3
  16. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cans/schema.py +7 -0
  17. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cans/unpack.py +76 -7
  18. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cli.py +42 -1
  19. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cloud/lambda_labs.py +56 -6
  20. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cloud/modal.py +117 -17
  21. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/adapters.py +2 -1
  22. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/can.py +15 -12
  23. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/push.py +45 -19
  24. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/runs.py +5 -2
  25. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/serve.py +69 -18
  26. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/config/schema.py +38 -12
  27. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/gate.py +8 -1
  28. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/experiment/tracker.py +13 -0
  29. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/mcp_server/execution.py +124 -10
  30. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/mcp_server/registry.py +86 -24
  31. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/ui/app.py +80 -1
  32. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/ui/static/app.js +131 -82
  33. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/ui/static/index.html +20 -19
  34. soup_cli-0.75.1/src/soup_cli/ui/static/safe_html.js +48 -0
  35. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_sign.py +9 -0
  36. soup_cli-0.75.1/src/soup_cli/utils/argv_redaction.py +163 -0
  37. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/audit_log.py +4 -1
  38. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/hubs.py +31 -0
  39. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/layer_stream_runtime.py +174 -19
  40. soup_cli-0.75.1/src/soup_cli/utils/local_request_guard.py +133 -0
  41. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/lr_groups.py +6 -14
  42. soup_cli-0.75.1/src/soup_cli/utils/safe_regex.py +312 -0
  43. soup_cli-0.75.1/src/soup_cli/utils/yaml_limits.py +121 -0
  44. soup_cli-0.75.1/tests/test_adapter_trusted_key_backend.py +134 -0
  45. soup_cli-0.75.1/tests/test_argv_redaction_bundled_shorts.py +78 -0
  46. soup_cli-0.75.1/tests/test_audit_log_option_masking.py +135 -0
  47. soup_cli-0.75.1/tests/test_can_deploy_target_containment.py +115 -0
  48. soup_cli-0.75.1/tests/test_can_output_control_bytes.py +99 -0
  49. soup_cli-0.75.1/tests/test_can_read_limits.py +199 -0
  50. soup_cli-0.75.1/tests/test_cloud_output_dir_containment.py +154 -0
  51. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_code_review_critical.py +2 -2
  52. soup_cli-0.75.1/tests/test_config_regex_limits.py +283 -0
  53. soup_cli-0.75.1/tests/test_hub_push_credentials.py +135 -0
  54. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_inference_advanced.py +5 -5
  55. soup_cli-0.75.1/tests/test_issue1005_peft021_canonical_names.py +283 -0
  56. soup_cli-0.75.1/tests/test_issue1005_peft021_review_round.py +350 -0
  57. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue369_canonical_named_parameters.py +23 -15
  58. soup_cli-0.75.1/tests/test_judge_key_scoping.py +59 -0
  59. soup_cli-0.75.1/tests/test_lambda_submit_interrupt.py +335 -0
  60. soup_cli-0.75.1/tests/test_local_request_guard.py +102 -0
  61. soup_cli-0.75.1/tests/test_mcp_capacity_all_runs.py +91 -0
  62. soup_cli-0.75.1/tests/test_mcp_digest_no_follow.py +292 -0
  63. soup_cli-0.75.1/tests/test_mcp_plan_inputs.py +230 -0
  64. soup_cli-0.75.1/tests/test_mcp_post_spawn_failure.py +130 -0
  65. soup_cli-0.75.1/tests/test_modal_stub_outputs.py +321 -0
  66. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_part_a_wave1.py +19 -0
  67. soup_cli-0.75.1/tests/test_runs_clean_keep_weights.py +177 -0
  68. soup_cli-0.75.1/tests/test_safe_regex.py +240 -0
  69. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_serve.py +2 -2
  70. soup_cli-0.75.1/tests/test_serve_local_request_guard.py +307 -0
  71. soup_cli-0.75.1/tests/test_ui_rendering_escapes.py +184 -0
  72. soup_cli-0.75.1/tests/test_ui_security_headers.py +203 -0
  73. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0536.py +1 -1
  74. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0537.py +20 -20
  75. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07135.py +1 -1
  76. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07201.py +11 -9
  77. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07202.py +2 -2
  78. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07203.py +11 -5
  79. soup_cli-0.75.1/tests/test_yaml_expanded_limit.py +283 -0
  80. {soup_cli-0.75.0 → soup_cli-0.75.1}/.dockerignore +0 -0
  81. {soup_cli-0.75.0 → soup_cli-0.75.1}/.gitattributes +0 -0
  82. {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/FUNDING.yml +0 -0
  83. {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  84. {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  85. {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  86. {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/constraints/transformers-floor.txt +0 -0
  87. {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/pull_request_template.md +0 -0
  88. {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/workflows/dependency-drift.yml +0 -0
  89. {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/workflows/docker.yml +0 -0
  90. {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/workflows/publish.yml +0 -0
  91. {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/workflows/recipe-repo-ids.yml +0 -0
  92. {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/workflows/recipe-validation.yml +0 -0
  93. {soup_cli-0.75.0 → soup_cli-0.75.1}/.gitignore +0 -0
  94. {soup_cli-0.75.0 → soup_cli-0.75.1}/.mailmap +0 -0
  95. {soup_cli-0.75.0 → soup_cli-0.75.1}/.pre-commit-config.yaml +0 -0
  96. {soup_cli-0.75.0 → soup_cli-0.75.1}/AGENTS.md +0 -0
  97. {soup_cli-0.75.0 → soup_cli-0.75.1}/CODEOWNERS +0 -0
  98. {soup_cli-0.75.0 → soup_cli-0.75.1}/CODE_OF_CONDUCT.md +0 -0
  99. {soup_cli-0.75.0 → soup_cli-0.75.1}/CONTRIBUTING.md +0 -0
  100. {soup_cli-0.75.0 → soup_cli-0.75.1}/CONTRIBUTORS.md +0 -0
  101. {soup_cli-0.75.0 → soup_cli-0.75.1}/Dockerfile +0 -0
  102. {soup_cli-0.75.0 → soup_cli-0.75.1}/LICENSE +0 -0
  103. {soup_cli-0.75.0 → soup_cli-0.75.1}/NOTICE +0 -0
  104. {soup_cli-0.75.0 → soup_cli-0.75.1}/SECURITY.md +0 -0
  105. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/README.md +0 -0
  106. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/bench_validator.py +0 -0
  107. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-395-second-stack-vram.md +0 -0
  108. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-655-pinned-store-accounting.md +0 -0
  109. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-674-quest-w4a4-sft.md +0 -0
  110. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-h100-validation.md +0 -0
  111. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-qwen4-ple-m4-max.md +0 -0
  112. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-v0.72.0-layer-streaming.md +0 -0
  113. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-v0.72.2-nf4.md +0 -0
  114. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-v0.72.3-breadth.md +0 -0
  115. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-v0.72.4-preference-losses.md +0 -0
  116. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-v0.73.1-measured-vram-fit.md +0 -0
  117. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-v0.73.2-leg2-scoring.md +0 -0
  118. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/harness/bitexact.py +0 -0
  119. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/harness/bnb_repro.py +0 -0
  120. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/harness/fsdp_sharding_probe.py +0 -0
  121. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/harness/issue331_qlora_scope.py +0 -0
  122. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/harness/issue395_second_stack_vram.py +0 -0
  123. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/harness/mlx_sft_smoke.py +0 -0
  124. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/probe-v0.73.0-what-bounds-streaming.md +0 -0
  125. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/run-m1-8gb-mlx-sft.md +0 -0
  126. {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/run-t4-colab-free-tier.md +0 -0
  127. {soup_cli-0.75.0 → soup_cli-0.75.1}/changelog.d/README.md +0 -0
  128. {soup_cli-0.75.0 → soup_cli-0.75.1}/docker-compose.yml +0 -0
  129. {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/README.md +0 -0
  130. {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/assets/layer-streaming.gif +0 -0
  131. {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/assets/web-ui-new-training.png +0 -0
  132. {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/autodistill.md +0 -0
  133. {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/compliance.md +0 -0
  134. {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/data.md +0 -0
  135. {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/models.md +0 -0
  136. {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/peft-and-efficiency.md +0 -0
  137. {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/README.md +0 -0
  138. {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/configs/dpo_chat.yaml +0 -0
  139. {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/configs/dpo_example.yaml +0 -0
  140. {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/configs/grpo_reasoning.yaml +0 -0
  141. {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/configs/rlhf_step1_sft.yaml +0 -0
  142. {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/configs/rlhf_step2_reward.yaml +0 -0
  143. {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/configs/rlhf_step3_ppo.yaml +0 -0
  144. {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/configs/sft_basic.yaml +0 -0
  145. {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/configs/vision_llama.yaml +0 -0
  146. {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/data/README.md +0 -0
  147. {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/data/alpaca_tiny.jsonl +0 -0
  148. {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/data/chat_preferences.jsonl +0 -0
  149. {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/data/dpo_sample.jsonl +0 -0
  150. {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/data/reasoning_math.jsonl +0 -0
  151. {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/reward_hacking/rewards.py +0 -0
  152. {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/synthetic_workflow.md +0 -0
  153. {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/synthetic_workflow.yaml +0 -0
  154. {soup_cli-0.75.0 → soup_cli-0.75.1}/notebooks/proof-4gb.ipynb +0 -0
  155. {soup_cli-0.75.0 → soup_cli-0.75.1}/scripts/__init__.py +0 -0
  156. {soup_cli-0.75.0 → soup_cli-0.75.1}/scripts/assemble_changelog.py +0 -0
  157. {soup_cli-0.75.0 → soup_cli-0.75.1}/scripts/autodistill_b1_hardware_smoke.py +0 -0
  158. {soup_cli-0.75.0 → soup_cli-0.75.1}/scripts/check_recipe_repo_ids.py +0 -0
  159. {soup_cli-0.75.0 → soup_cli-0.75.1}/scripts/generate_recipe_snapshot.py +0 -0
  160. {soup_cli-0.75.0 → soup_cli-0.75.1}/soup.png +0 -0
  161. {soup_cli-0.75.0 → soup_cli-0.75.1}/soup_logo_svg.svg +0 -0
  162. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/__main__.py +0 -0
  163. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autodistill/__init__.py +0 -0
  164. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autodistill/capture.py +0 -0
  165. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autodistill/contract.py +0 -0
  166. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autodistill/fingerprints.py +0 -0
  167. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autodistill/mlx_worker.py +0 -0
  168. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autodistill/publisher.py +0 -0
  169. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autopilot/__init__.py +0 -0
  170. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autopilot/analyzer.py +0 -0
  171. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autopilot/decisions.py +0 -0
  172. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autopilot/generate_config.py +0 -0
  173. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cans/__init__.py +0 -0
  174. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cans/pack.py +0 -0
  175. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cans/publish.py +0 -0
  176. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cans/verify.py +0 -0
  177. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cloud/__init__.py +0 -0
  178. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cloud/_common.py +0 -0
  179. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/__init__.py +0 -0
  180. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/_eval_v0550.py +0 -0
  181. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/_eval_v0610.py +0 -0
  182. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/_eval_v0650.py +0 -0
  183. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/_eval_v07110.py +0 -0
  184. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/_webhook_cli.py +0 -0
  185. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/ab.py +0 -0
  186. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/active_sample.py +0 -0
  187. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/advise.py +0 -0
  188. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/agent.py +0 -0
  189. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/airgap.py +0 -0
  190. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/apple_adapter.py +0 -0
  191. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/attest.py +0 -0
  192. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/audit_log.py +0 -0
  193. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/autopilot.py +0 -0
  194. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/bench.py +0 -0
  195. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/bom.py +0 -0
  196. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/build.py +0 -0
  197. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/card.py +0 -0
  198. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/chat.py +0 -0
  199. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/ci.py +0 -0
  200. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/compile_cmd.py +0 -0
  201. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/compile_tools.py +0 -0
  202. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/completions.py +0 -0
  203. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/cost.py +0 -0
  204. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/data.py +0 -0
  205. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/data_canary.py +0 -0
  206. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/data_doctor.py +0 -0
  207. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/data_forge.py +0 -0
  208. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/data_mix.py +0 -0
  209. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/data_score.py +0 -0
  210. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/data_topics.py +0 -0
  211. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/delinearize_llama4.py +0 -0
  212. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/deploy.py +0 -0
  213. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/diagnose.py +0 -0
  214. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/diff.py +0 -0
  215. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/distill_prompt.py +0 -0
  216. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/doctor.py +0 -0
  217. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/draft.py +0 -0
  218. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/drift_alarm.py +0 -0
  219. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/edit.py +0 -0
  220. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/env.py +0 -0
  221. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/eval.py +0 -0
  222. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/expect.py +0 -0
  223. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/export.py +0 -0
  224. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/fetch.py +0 -0
  225. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/generate.py +0 -0
  226. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/history.py +0 -0
  227. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/infer.py +0 -0
  228. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/ingest.py +0 -0
  229. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/init.py +0 -0
  230. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/iterative_dpo.py +0 -0
  231. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/license_advisor.py +0 -0
  232. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/llama.py +0 -0
  233. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/local_rl.py +0 -0
  234. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/lock.py +0 -0
  235. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/loop.py +0 -0
  236. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/mcp.py +0 -0
  237. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/merge.py +0 -0
  238. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
  239. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/migrate.py +0 -0
  240. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/monitor.py +0 -0
  241. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/plan.py +0 -0
  242. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/plugins.py +0 -0
  243. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/probe.py +0 -0
  244. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/profile.py +0 -0
  245. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/prune_prompt.py +0 -0
  246. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/quantize.py +0 -0
  247. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/quickstart.py +0 -0
  248. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/ra_dit.py +0 -0
  249. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/recipes.py +0 -0
  250. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/registry.py +0 -0
  251. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/reward.py +0 -0
  252. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/ship.py +0 -0
  253. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/shrink.py +0 -0
  254. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/spectrum.py +0 -0
  255. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/steer.py +0 -0
  256. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/sweep.py +0 -0
  257. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/tokenizer.py +0 -0
  258. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/train.py +0 -0
  259. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/tui.py +0 -0
  260. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/tunability.py +0 -0
  261. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/ui.py +0 -0
  262. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/why.py +0 -0
  263. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/config/__init__.py +0 -0
  264. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/config/backend_support.py +0 -0
  265. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/config/loader.py +0 -0
  266. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/config/unknown_keys.py +0 -0
  267. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/__init__.py +0 -0
  268. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
  269. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
  270. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
  271. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
  272. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
  273. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
  274. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
  275. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
  276. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/gate/format_json.jsonl +0 -0
  277. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/gate/over_refusal.jsonl +0 -0
  278. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/gate/safety.jsonl +0 -0
  279. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/gate/tool_call.jsonl +0 -0
  280. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
  281. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
  282. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
  283. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
  284. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/augment.py +0 -0
  285. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/chat_templates.py +0 -0
  286. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/collators.py +0 -0
  287. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/formats.py +0 -0
  288. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/loader.py +0 -0
  289. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/loss_mask.py +0 -0
  290. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/providers/__init__.py +0 -0
  291. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/providers/_utils.py +0 -0
  292. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/providers/anthropic.py +0 -0
  293. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/providers/ollama.py +0 -0
  294. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/providers/vllm.py +0 -0
  295. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/sft_format.py +0 -0
  296. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/templates/__init__.py +0 -0
  297. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/templates/code.py +0 -0
  298. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/templates/conversation.py +0 -0
  299. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/templates/preference.py +0 -0
  300. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/templates/qa.py +0 -0
  301. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/templates/reasoning.py +0 -0
  302. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/templates/tool_calling.py +0 -0
  303. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/templates/verifiable.py +0 -0
  304. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/traces/__init__.py +0 -0
  305. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/traces/pair_builder.py +0 -0
  306. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/traces/parsers.py +0 -0
  307. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/traces/quality.py +0 -0
  308. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/validator.py +0 -0
  309. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/envs/__init__.py +0 -0
  310. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/envs/_common.py +0 -0
  311. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/envs/calculator.py +0 -0
  312. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/envs/guess_number.py +0 -0
  313. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/envs/retrieval_qa.py +0 -0
  314. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/__init__.py +0 -0
  315. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/aider_polyglot.py +0 -0
  316. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/arena.py +0 -0
  317. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
  318. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/calibrate.py +0 -0
  319. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
  320. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/custom.py +0 -0
  321. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/forgetting.py +0 -0
  322. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/gate_suites.py +0 -0
  323. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/human.py +0 -0
  324. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/judge.py +0 -0
  325. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/leaderboard.py +0 -0
  326. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/quant_check.py +0 -0
  327. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/experiment/__init__.py +0 -0
  328. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/mcp_server/__init__.py +0 -0
  329. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/mcp_server/server.py +0 -0
  330. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/migrate/__init__.py +0 -0
  331. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/migrate/axolotl.py +0 -0
  332. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/migrate/common.py +0 -0
  333. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/migrate/llamafactory.py +0 -0
  334. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/migrate/unsloth.py +0 -0
  335. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/monitoring/__init__.py +0 -0
  336. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/monitoring/callback.py +0 -0
  337. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
  338. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/monitoring/display.py +0 -0
  339. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
  340. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/monitoring/hf_push.py +0 -0
  341. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/monitoring/plugin_callback.py +0 -0
  342. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/monitoring/trace_logger.py +0 -0
  343. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/plugins/__init__.py +0 -0
  344. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/py.typed +0 -0
  345. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/recipes/__init__.py +0 -0
  346. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/recipes/catalog.py +0 -0
  347. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/registry/__init__.py +0 -0
  348. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/registry/attach.py +0 -0
  349. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/registry/diff.py +0 -0
  350. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/registry/hashing.py +0 -0
  351. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/registry/store.py +0 -0
  352. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/__init__.py +0 -0
  353. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/audio.yaml +0 -0
  354. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/bco.yaml +0 -0
  355. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/chat.yaml +0 -0
  356. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/code.yaml +0 -0
  357. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/embedding.yaml +0 -0
  358. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/eu-ai-act.yaml +0 -0
  359. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
  360. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
  361. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
  362. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/hipaa.yaml +0 -0
  363. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/ipo.yaml +0 -0
  364. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/kto.yaml +0 -0
  365. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/longcontext.yaml +0 -0
  366. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/manifest.json +0 -0
  367. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/medical.yaml +0 -0
  368. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/moe.yaml +0 -0
  369. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/orpo.yaml +0 -0
  370. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/pretrain.yaml +0 -0
  371. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/reasoning.yaml +0 -0
  372. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/rlhf.yaml +0 -0
  373. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/simpo.yaml +0 -0
  374. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/soc2.yaml +0 -0
  375. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/sr-11-7.yaml +0 -0
  376. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/tool-calling.yaml +0 -0
  377. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/vision.yaml +0 -0
  378. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/__init__.py +0 -0
  379. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/_trl_compat.py +0 -0
  380. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/asr.py +0 -0
  381. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/bco.py +0 -0
  382. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/bitnet.py +0 -0
  383. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/classifier.py +0 -0
  384. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/distill.py +0 -0
  385. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/dpo.py +0 -0
  386. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/embedding.py +0 -0
  387. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/grpo.py +0 -0
  388. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/ipo.py +0 -0
  389. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/kto.py +0 -0
  390. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/mlx_dpo.py +0 -0
  391. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/mlx_grpo.py +0 -0
  392. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/mlx_masking.py +0 -0
  393. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/mlx_optim.py +0 -0
  394. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/mlx_routing.py +0 -0
  395. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/mlx_sft.py +0 -0
  396. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/mole_routing.py +0 -0
  397. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/online_dpo.py +0 -0
  398. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/orpo.py +0 -0
  399. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/ppo.py +0 -0
  400. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/preference.py +0 -0
  401. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/pretrain.py +0 -0
  402. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/prm.py +0 -0
  403. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/raft.py +0 -0
  404. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/reward_model.py +0 -0
  405. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/rewards.py +0 -0
  406. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/sft.py +0 -0
  407. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/simpo.py +0 -0
  408. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/stream_setup.py +0 -0
  409. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/tts.py +0 -0
  410. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/unlearn.py +0 -0
  411. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/tui_app.py +0 -0
  412. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/ui/__init__.py +0 -0
  413. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/ui/plugins/__init__.py +0 -0
  414. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/ui/static/logo.png +0 -0
  415. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/ui/static/logo.svg +0 -0
  416. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/ui/static/style.css +0 -0
  417. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/__init__.py +0 -0
  418. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/_eval_text.py +0 -0
  419. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ab_test.py +0 -0
  420. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/activation_offload.py +0 -0
  421. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/active_sampler.py +0 -0
  422. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_arithmetic.py +0 -0
  423. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_bisect.py +0 -0
  424. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_branch.py +0 -0
  425. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_diff.py +0 -0
  426. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_fuse.py +0 -0
  427. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_merge.py +0 -0
  428. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_pr.py +0 -0
  429. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_scan.py +0 -0
  430. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/advanced_precision.py +0 -0
  431. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/advise.py +0 -0
  432. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/advise_history.py +0 -0
  433. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/agent_forge.py +0 -0
  434. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/agent_rollout.py +0 -0
  435. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/agent_sandbox.py +0 -0
  436. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/airgap_bundle.py +0 -0
  437. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/annex_xi.py +0 -0
  438. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/anthropic_messages.py +0 -0
  439. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/apple_adapter.py +0 -0
  440. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/asr_metrics.py +0 -0
  441. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/attest.py +0 -0
  442. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/auto_quant.py +0 -0
  443. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/backend_detect.py +0 -0
  444. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/batch_probe.py +0 -0
  445. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/behavior_battery.py +0 -0
  446. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/best_of_n.py +0 -0
  447. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/best_of_n_artifact.py +0 -0
  448. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/best_of_n_checkpoint.py +0 -0
  449. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/best_of_n_stream.py +0 -0
  450. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/bitnet.py +0 -0
  451. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/blame.py +0 -0
  452. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/block_expansion.py +0 -0
  453. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/bom.py +0 -0
  454. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/brain_rot.py +0 -0
  455. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/brain_rot_lang.py +0 -0
  456. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/build_dag.py +0 -0
  457. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/canary.py +0 -0
  458. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/canary_discovery.py +0 -0
  459. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/canary_router.py +0 -0
  460. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/capability_suite.py +0 -0
  461. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/checklist_dsl.py +0 -0
  462. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
  463. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ci_workflow.py +0 -0
  464. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/citation_faithful.py +0 -0
  465. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/classifier.py +0 -0
  466. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/cmaes_merge.py +0 -0
  467. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/compile_tools.py +0 -0
  468. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/completions.py +0 -0
  469. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/constants.py +0 -0
  470. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/convergence.py +0 -0
  471. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/crash.py +0 -0
  472. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/cross_doc_attn.py +0 -0
  473. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/curriculum.py +0 -0
  474. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
  475. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/cut_ce.py +0 -0
  476. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/data_doctor.py +0 -0
  477. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/data_forge.py +0 -0
  478. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/data_lint.py +0 -0
  479. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/data_mix.py +0 -0
  480. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/data_pipeline.py +0 -0
  481. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/data_score.py +0 -0
  482. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/deepspeed.py +0 -0
  483. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/delinearize_llama4.py +0 -0
  484. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/demo_bundles.py +0 -0
  485. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/deploy_autopilot.py +0 -0
  486. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/deploy_measure.py +0 -0
  487. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/__init__.py +0 -0
  488. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/_common.py +0 -0
  489. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/badge.py +0 -0
  490. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/citation.py +0 -0
  491. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/contamination.py +0 -0
  492. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
  493. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/format.py +0 -0
  494. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/live.py +0 -0
  495. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/memorization.py +0 -0
  496. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
  497. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/refusal.py +0 -0
  498. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/report.py +0 -0
  499. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/runner.py +0 -0
  500. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/distill.py +0 -0
  501. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/dpo_variants.py +0 -0
  502. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/draft.py +0 -0
  503. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/drift_alarm.py +0 -0
  504. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ebft_gdpo.py +0 -0
  505. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/echo_trap.py +0 -0
  506. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/edit_diff.py +0 -0
  507. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/edit_governor.py +0 -0
  508. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/edit_kernels.py +0 -0
  509. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/embed.py +0 -0
  510. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/encoding.py +0 -0
  511. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/energy.py +0 -0
  512. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/env_lock.py +0 -0
  513. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/errors.py +0 -0
  514. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/eval_design.py +0 -0
  515. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/eval_gate_hook.py +0 -0
  516. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
  517. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/evolve.py +0 -0
  518. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/expectations.py +0 -0
  519. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/fetch_examples.py +0 -0
  520. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/flash_attn.py +0 -0
  521. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/fp8.py +0 -0
  522. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/freeze.py +0 -0
  523. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/fsdp.py +0 -0
  524. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
  525. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/galore.py +0 -0
  526. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/gguf_quant.py +0 -0
  527. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/gpu.py +0 -0
  528. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/gpu_monitor.py +0 -0
  529. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/grace_codebook.py +0 -0
  530. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/graceful_save.py +0 -0
  531. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/grad_accum.py +0 -0
  532. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/gradient_ckpt.py +0 -0
  533. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/grpo_long_context.py +0 -0
  534. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/grpo_variants.py +0 -0
  535. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/hardware_fit.py +0 -0
  536. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/harm_probe.py +0 -0
  537. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/hf.py +0 -0
  538. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/hf_space.py +0 -0
  539. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ingest_pull.py +0 -0
  540. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ingest_sources.py +0 -0
  541. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/integrations.py +0 -0
  542. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/interference.py +0 -0
  543. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/interference_live.py +0 -0
  544. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/irt.py +0 -0
  545. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/iterative_dpo.py +0 -0
  546. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/jinja_analyzer.py +0 -0
  547. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/kernel_picker.py +0 -0
  548. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/knowledge_edit.py +0 -0
  549. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/kv_cache.py +0 -0
  550. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/launcher.py +0 -0
  551. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/layer_shard.py +0 -0
  552. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/layer_stream.py +0 -0
  553. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/license_advisor.py +0 -0
  554. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/license_matrix.py +0 -0
  555. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/liger.py +0 -0
  556. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/lisa.py +0 -0
  557. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/live_eval.py +0 -0
  558. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/llama_proxy.py +0 -0
  559. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/llama_server_timings.py +0 -0
  560. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/local_rl.py +0 -0
  561. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
  562. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/loftq_init.py +0 -0
  563. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/log_level.py +0 -0
  564. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/long_context.py +0 -0
  565. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/longlora.py +0 -0
  566. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/loop_budget.py +0 -0
  567. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/loop_daemon.py +0 -0
  568. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/loop_iteration.py +0 -0
  569. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/loop_stages.py +0 -0
  570. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/loop_state.py +0 -0
  571. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/lr_finder.py +0 -0
  572. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/magpie.py +0 -0
  573. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/metrics.py +0 -0
  574. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/mii.py +0 -0
  575. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/minillm.py +0 -0
  576. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/mix_proxy.py +0 -0
  577. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/mixed_precision.py +0 -0
  578. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/mlx.py +0 -0
  579. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/mod.py +0 -0
  580. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/moe.py +0 -0
  581. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/moe_quant.py +0 -0
  582. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/mole_routing.py +0 -0
  583. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/multipack.py +0 -0
  584. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/multipack_sampler.py +0 -0
  585. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/multipack_trainer.py +0 -0
  586. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/namespace_pin.py +0 -0
  587. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/neat_packing.py +0 -0
  588. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/net_guard.py +0 -0
  589. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ngram_spec.py +0 -0
  590. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/nlg_metrics.py +0 -0
  591. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ollama.py +0 -0
  592. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/onboarding.py +0 -0
  593. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/optimizer_zoo.py +0 -0
  594. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/oq_affine.py +0 -0
  595. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/paths.py +0 -0
  596. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/peft_builder.py +0 -0
  597. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/peft_patches.py +0 -0
  598. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/peft_wiring.py +0 -0
  599. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/persona_hub.py +0 -0
  600. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/pipeline.py +0 -0
  601. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/plotext_compat.py +0 -0
  602. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/preference_combine.py +0 -0
  603. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/prm.py +0 -0
  604. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/prm_reward.py +0 -0
  605. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/probe_kernel.py +0 -0
  606. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/probe_pack.py +0 -0
  607. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/process_liveness.py +0 -0
  608. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/profiler.py +0 -0
  609. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/profiling.py +0 -0
  610. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/profiling_v0_43.py +0 -0
  611. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/prompt_compile.py +0 -0
  612. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/prompt_distill.py +0 -0
  613. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/prune_prompt.py +0 -0
  614. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/qat.py +0 -0
  615. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/qr_url.py +0 -0
  616. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/quality.py +0 -0
  617. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/quant_menu.py +0 -0
  618. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/qwen4_compat.py +0 -0
  619. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/qwen4_ple.py +0 -0
  620. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ra_dit.py +0 -0
  621. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ra_dit_run.py +0 -0
  622. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/raft.py +0 -0
  623. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/reasoning_effort.py +0 -0
  624. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/reasoning_parser.py +0 -0
  625. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/recipe_dag.py +0 -0
  626. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/recipe_run.py +0 -0
  627. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/registry.py +0 -0
  628. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/rehearsal.py +0 -0
  629. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/relora.py +0 -0
  630. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/replay.py +0 -0
  631. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/repro_receipt.py +0 -0
  632. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/reward_hack_control.py +0 -0
  633. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/reward_hacking.py +0 -0
  634. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/reward_stress.py +0 -0
  635. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/reward_synth.py +0 -0
  636. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ring_attention.py +0 -0
  637. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/rl_checkpoint.py +0 -0
  638. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
  639. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/run_cost.py +0 -0
  640. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/sae_diff.py +0 -0
  641. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/save_formats.py +0 -0
  642. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/seeding.py +0 -0
  643. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/semdedup.py +0 -0
  644. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/server_tools.py +0 -0
  645. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/sglang.py +0 -0
  646. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ship_verdict.py +0 -0
  647. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/shortcuts.py +0 -0
  648. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/shrink.py +0 -0
  649. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/signing.py +0 -0
  650. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/sleeper_probe.py +0 -0
  651. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/soup_lock.py +0 -0
  652. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/spec_pairing.py +0 -0
  653. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/spectrum_scan.py +0 -0
  654. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/spike_recovery.py +0 -0
  655. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/sse_train_stream.py +0 -0
  656. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/steering.py +0 -0
  657. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/strict_safetensors.py +0 -0
  658. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/structured_output.py +0 -0
  659. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/sweep_config.py +0 -0
  660. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/tail_latency.py +0 -0
  661. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/terminal.py +0 -0
  662. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/terraform_plan.py +0 -0
  663. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/tool_outputs.py +0 -0
  664. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/topics.py +0 -0
  665. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/topology.py +0 -0
  666. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/tracing.py +0 -0
  667. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/trackers.py +0 -0
  668. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/train_event_buffer.py +0 -0
  669. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/trainer_plugins.py +0 -0
  670. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/trust_remote.py +0 -0
  671. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/truth_probe.py +0 -0
  672. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/tts.py +0 -0
  673. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/tts_codec.py +0 -0
  674. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/tunability.py +0 -0
  675. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ui_env.py +0 -0
  676. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/uld.py +0 -0
  677. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/unlearn_kernels.py +0 -0
  678. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/unlearning.py +0 -0
  679. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/unlearning_eval.py +0 -0
  680. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/unsloth.py +0 -0
  681. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/v028_features.py +0 -0
  682. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/vector_bank.py +0 -0
  683. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/vllm.py +0 -0
  684. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/vscode_setup.py +0 -0
  685. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/warmup.py +0 -0
  686. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/webhooks.py +0 -0
  687. {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/why.py +0 -0
  688. {soup_cli-0.75.0 → soup_cli-0.75.1}/templates/chat.yaml +0 -0
  689. {soup_cli-0.75.0 → soup_cli-0.75.1}/templates/code.yaml +0 -0
  690. {soup_cli-0.75.0 → soup_cli-0.75.1}/templates/medical.yaml +0 -0
  691. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/__init__.py +0 -0
  692. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/_windows_ci.py +0 -0
  693. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/conftest.py +0 -0
  694. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/fixtures/autodistill/v1/capture_token.json +0 -0
  695. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/fixtures/autodistill/v1/consumption_ledger.json +0 -0
  696. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/fixtures/autodistill/v1/plan.json +0 -0
  697. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/fixtures/autodistill/v1/shard_manifest.json +0 -0
  698. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/fixtures/autodistill/v1/student_rollout_capture_token.json +0 -0
  699. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/fixtures/issue204_langfuse_observations_v2_page.json +0 -0
  700. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/fixtures/recipe_config_snapshots.json +0 -0
  701. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/mcp_roundtrip.py +0 -0
  702. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/qa/v053_qa.md +0 -0
  703. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/qa/v07114_qa.md +0 -0
  704. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/qa/v0716_qa.md +0 -0
  705. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_adapters.py +0 -0
  706. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_advanced_peft.py +0 -0
  707. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_align_trainable_dtype.py +0 -0
  708. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_assistant_mask.py +0 -0
  709. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_audio.py +0 -0
  710. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_auto_tuning.py +0 -0
  711. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_autopilot.py +0 -0
  712. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_awq_gptq_export.py +0 -0
  713. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_batch_probe.py +0 -0
  714. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_bco.py +0 -0
  715. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_bench.py +0 -0
  716. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_brain_rot_multilingual.py +0 -0
  717. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_bugfixes.py +0 -0
  718. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_build_dag.py +0 -0
  719. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_callback.py +0 -0
  720. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_cans.py +0 -0
  721. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_chat.py +0 -0
  722. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_chat_template.py +0 -0
  723. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_cli.py +0 -0
  724. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_cli_help_assertions_are_ansi_safe.py +0 -0
  725. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_cli_startup_is_light.py +0 -0
  726. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_cli_subprocess.py +0 -0
  727. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_code_review_deferred.py +0 -0
  728. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_code_review_high.py +0 -0
  729. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_code_review_medium_low.py +0 -0
  730. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_code_review_recurring.py +0 -0
  731. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_config.py +0 -0
  732. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_contributing_test_counts_are_digit_free.py +0 -0
  733. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_cost.py +0 -0
  734. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_crash_reporter.py +0 -0
  735. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_curriculum.py +0 -0
  736. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_data.py +0 -0
  737. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_data_augment.py +0 -0
  738. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_data_sample.py +0 -0
  739. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_data_split.py +0 -0
  740. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_data_tools.py +0 -0
  741. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_dataset_hub.py +0 -0
  742. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_dataset_registry.py +0 -0
  743. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_deepspeed.py +0 -0
  744. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_demo_bundle_metadata.py +0 -0
  745. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_deploy_ollama.py +0 -0
  746. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_device_map_distributed.py +0 -0
  747. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_diff.py +0 -0
  748. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_display.py +0 -0
  749. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_doctor.py +0 -0
  750. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_dpo_example.py +0 -0
  751. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_dpo_variants.py +0 -0
  752. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_embedding.py +0 -0
  753. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_errors.py +0 -0
  754. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_eval.py +0 -0
  755. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_eval_gate.py +0 -0
  756. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_eval_platform.py +0 -0
  757. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_examples_configs.py +0 -0
  758. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_export.py +0 -0
  759. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_formats.py +0 -0
  760. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_fp8_recipe.py +0 -0
  761. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_freeze_training.py +0 -0
  762. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_generate.py +0 -0
  763. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_gpu.py +0 -0
  764. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_grpo.py +0 -0
  765. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_hf_integration.py +0 -0
  766. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_infer.py +0 -0
  767. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_init.py +0 -0
  768. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_ipo.py +0 -0
  769. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue144_gguf_export.py +0 -0
  770. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue204_langfuse_pull.py +0 -0
  771. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue23_mlx_display_bridge.py +0 -0
  772. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue23_mlx_harness_bridge.py +0 -0
  773. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue23_mlx_val_loss_producer.py +0 -0
  774. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue264_cloud.py +0 -0
  775. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue296_network_transport.py +0 -0
  776. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue300_online_dpo_kwargs.py +0 -0
  777. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue300_online_dpo_train.py +0 -0
  778. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue302_vision_pad_token.py +0 -0
  779. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue304_cross_tokenizer.py +0 -0
  780. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue305_mixed_rank_arithmetic.py +0 -0
  781. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue308_callback_subclass.py +0 -0
  782. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue316_refusal_apostrophe.py +0 -0
  783. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue316_suites.py +0 -0
  784. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue320_lazy_callback_import.py +0 -0
  785. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue322_mcp2_compat.py +0 -0
  786. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue323_trl_kwarg_drift.py +0 -0
  787. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue327_logits_estimate.py +0 -0
  788. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue330_mix_recipe_train_loadable.py +0 -0
  789. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue332_vllm_prompt.py +0 -0
  790. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue334_fa3_detection.py +0 -0
  791. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue336_deepspeed_lora.py +0 -0
  792. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue339_load_dtype.py +0 -0
  793. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue341_seed_and_fullft.py +0 -0
  794. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue348_calibrated_logits_wiring.py +0 -0
  795. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue349_measured_fit.py +0 -0
  796. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue350_fsdp_qlora.py +0 -0
  797. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue352_fsdp_peft_checkpoint.py +0 -0
  798. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue353_mlx_seed_warning.py +0 -0
  799. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue353_seed_every_task.py +0 -0
  800. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue359_deepspeed_guard_coverage.py +0 -0
  801. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue360_sglang_prompt_finish_reason.py +0 -0
  802. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue367_live_eval_quantization.py +0 -0
  803. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue372_no_reexec_hint.py +0 -0
  804. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue373_fsdp_sharding_probe.py +0 -0
  805. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue374_stream_disk_preflight.py +0 -0
  806. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue377_lisa_train_embeddings.py +0 -0
  807. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue382_windows_ci_guard_is_shared.py +0 -0
  808. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue385_stream_dtype.py +0 -0
  809. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue389_torchao_error.py +0 -0
  810. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue390_expandable_segments_reason.py +0 -0
  811. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue392_mlx_target_keys.py +0 -0
  812. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue394_mlx_runtime_isolation.py +0 -0
  813. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue401_orphaned_run_reconcile.py +0 -0
  814. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue402_restart_capacity.py +0 -0
  815. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue404_baseline_scorer_stamp.py +0 -0
  816. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue423_mlx_device_detection.py +0 -0
  817. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue424_windows_liveness.py +0 -0
  818. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue427_qwen35_text_modality.py +0 -0
  819. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue433_meta_adapter_guard.py +0 -0
  820. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue441_coerce_token_ids.py +0 -0
  821. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue443_interleave_wiring.py +0 -0
  822. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue459_interleave_streaming_hub.py +0 -0
  823. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue477_qwen38_catalog.py +0 -0
  824. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue487_changelog_fragments.py +0 -0
  825. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue491_frozen_base_load_dtype.py +0 -0
  826. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue502_qwen35_transformers5.py +0 -0
  827. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue505_launching_window_blocks_restart.py +0 -0
  828. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue524_launching_reconcile.py +0 -0
  829. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue531_stream_base_provenance.py +0 -0
  830. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue532_supervised_token_guard.py +0 -0
  831. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue533_offline_hf_materialization.py +0 -0
  832. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue534_apple_nvme.py +0 -0
  833. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue546_transient_finite_metric.py +0 -0
  834. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue549_bon_resume.py +0 -0
  835. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue550_bon_offline.py +0 -0
  836. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue555_bon_stream_resume.py +0 -0
  837. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue563_mps_bf16_training.py +0 -0
  838. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue565_grpo_reward_metadata.py +0 -0
  839. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue567_grpo_mps_bf16.py +0 -0
  840. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue571_qwen4_exp.py +0 -0
  841. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue573_qwen4_expert_lora.py +0 -0
  842. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue580_autodistill_capture.py +0 -0
  843. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue580_autodistill_contract.py +0 -0
  844. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue580_autodistill_fingerprints.py +0 -0
  845. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue580_autodistill_mlx_worker.py +0 -0
  846. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue580_autodistill_publisher.py +0 -0
  847. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue599_telemetry_dns_ssrf.py +0 -0
  848. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue600_abbreviated_ipv4_ssrf.py +0 -0
  849. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue602_qwen4_ple_streaming.py +0 -0
  850. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue616_net_guard_is_shared.py +0 -0
  851. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue621_recipe_snapshot.py +0 -0
  852. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue623_stream_pin_allocation.py +0 -0
  853. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue627_unknown_config_keys.py +0 -0
  854. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue633_ansi_in_highlighted_output.py +0 -0
  855. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue634_mlx_resume.py +0 -0
  856. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue636_torch_floor.py +0 -0
  857. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue642_sweep_dry_run.py +0 -0
  858. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue649_batch_probe_peak_gate.py +0 -0
  859. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue654_batch_probe_uncovered_branches.py +0 -0
  860. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue676_non_dict_messages.py +0 -0
  861. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue677_recipe_repo_id_guard.py +0 -0
  862. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue681_uld_id_compat.py +0 -0
  863. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue682_uld_loss_label_mask.py +0 -0
  864. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue683_mlx_response_masking.py +0 -0
  865. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue684_mlx_grad_accumulation.py +0 -0
  866. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue685_mlx_grad_checkpoint.py +0 -0
  867. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue686_mlx_optimizer_schedule.py +0 -0
  868. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue687_ui_auth.py +0 -0
  869. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue688_ui_drain.py +0 -0
  870. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue689_hub_streaming.py +0 -0
  871. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue690_embedding_trainer_attrs.py +0 -0
  872. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue691_sft_packing.py +0 -0
  873. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue695_validate_agrees_with_loader.py +0 -0
  874. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue700_embedding_lora_zero.py +0 -0
  875. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue721_ppo_config_forwarding.py +0 -0
  876. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue723_sequence_gspo.py +0 -0
  877. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue724_loraplus_optimizer.py +0 -0
  878. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue724_loraplus_wiring_coverage.py +0 -0
  879. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue731_ui_docs_bind.py +0 -0
  880. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue748_config_fields_reach_a_consumer.py +0 -0
  881. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue752_cli_commands_called_as_functions.py +0 -0
  882. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue755_backend_support_registry.py +0 -0
  883. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue771_validator_fast_path.py +0 -0
  884. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue775_path_containment_ratchet.py +0 -0
  885. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue781_inference_bos.py +0 -0
  886. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue811_data_validate_exit_codes.py +0 -0
  887. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue91_aider_eval.py +0 -0
  888. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue99_apple_monitor.py +0 -0
  889. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_jinja_analyzer.py +0 -0
  890. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_kto.py +0 -0
  891. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_loader.py +0 -0
  892. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_log_level.py +0 -0
  893. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_loss_watchdog.py +0 -0
  894. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_mcp_execute.py +0 -0
  895. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_merge.py +0 -0
  896. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_migrate.py +0 -0
  897. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_mii_serve.py +0 -0
  898. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_mlx_backend.py +0 -0
  899. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_mlx_dispatch.py +0 -0
  900. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_mlx_max_grad_norm.py +0 -0
  901. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_moe.py +0 -0
  902. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_multi_adapter.py +0 -0
  903. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_multi_gpu.py +0 -0
  904. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_multipack_config.py +0 -0
  905. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_multipack_ffd_placement.py +0 -0
  906. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_multipack_invariants.py +0 -0
  907. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_multipack_sampler.py +0 -0
  908. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_neat_packing.py +0 -0
  909. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_neftune_rslora.py +0 -0
  910. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_no_foreign_license_headers.py +0 -0
  911. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_onnx_tensorrt_export.py +0 -0
  912. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_orpo.py +0 -0
  913. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_packing.py +0 -0
  914. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_part_a_wave2.py +0 -0
  915. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_part_b.py +0 -0
  916. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_part_c.py +0 -0
  917. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_part_d.py +0 -0
  918. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_part_e.py +0 -0
  919. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_part_f_hardening.py +0 -0
  920. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_peft_methods.py +0 -0
  921. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_peft_patches.py +0 -0
  922. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_performance.py +0 -0
  923. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_pissa_init.py +0 -0
  924. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_plotext_compat.py +0 -0
  925. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_ppo.py +0 -0
  926. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_preference_dispatcher.py +0 -0
  927. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_preference_multi.py +0 -0
  928. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_preference_multi_runtime.py +0 -0
  929. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_pretrain.py +0 -0
  930. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_profile.py +0 -0
  931. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_profiling.py +0 -0
  932. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_progress.py +0 -0
  933. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_push.py +0 -0
  934. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_qat.py +0 -0
  935. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_quality_filter.py +0 -0
  936. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_quant_check.py +0 -0
  937. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_quant_menu.py +0 -0
  938. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_quickstart.py +0 -0
  939. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_qwen35_streaming.py +0 -0
  940. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_rank_pattern.py +0 -0
  941. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_readme_translation_sync.py +0 -0
  942. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_recipe_count_is_synced.py +0 -0
  943. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_recipes.py +0 -0
  944. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_recipes_v031.py +0 -0
  945. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_refusal_multilingual.py +0 -0
  946. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_registry.py +0 -0
  947. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_relora.py +0 -0
  948. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_replay.py +0 -0
  949. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_requires_python_bound.py +0 -0
  950. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_resume.py +0 -0
  951. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_review_fixes_v07133.py +0 -0
  952. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_rlvr.py +0 -0
  953. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_run_cost.py +0 -0
  954. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_runs.py +0 -0
  955. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_semantic_split.py +0 -0
  956. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_server_generate.py +0 -0
  957. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_sglang_serve.py +0 -0
  958. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_sglang_trust_contract.py +0 -0
  959. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_simpo.py +0 -0
  960. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_smoke_train.py +0 -0
  961. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_speculative_decoding.py +0 -0
  962. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_stream_multi_gpu_guard.py +0 -0
  963. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_sweep.py +0 -0
  964. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_synth_data_pro.py +0 -0
  965. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_telemetry_ssrf.py +0 -0
  966. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_templates_yaml.py +0 -0
  967. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_tensorboard.py +0 -0
  968. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_tool_calling.py +0 -0
  969. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_trace_to_pref.py +0 -0
  970. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_tracker.py +0 -0
  971. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_trainer_coverage_v035.py +0 -0
  972. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_trainer_init.py +0 -0
  973. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_training_intelligence.py +0 -0
  974. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_training_speed.py +0 -0
  975. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_transformers_floor_compat.py +0 -0
  976. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_trl_preference_config_contract.py +0 -0
  977. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_trl_version_compat.py +0 -0
  978. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_trust_remote_code.py +0 -0
  979. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_tui.py +0 -0
  980. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_ui.py +0 -0
  981. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_ui_chat.py +0 -0
  982. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_ui_config_builder.py +0 -0
  983. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_ui_live_monitor.py +0 -0
  984. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_ui_metrics.py +0 -0
  985. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_unsloth.py +0 -0
  986. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0401_part_c.py +0 -0
  987. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0401_part_d.py +0 -0
  988. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0401_part_e.py +0 -0
  989. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0402_part_a.py +0 -0
  990. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0402_part_b.py +0 -0
  991. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0403_part_a.py +0 -0
  992. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0403_part_b.py +0 -0
  993. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0403_part_c.py +0 -0
  994. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0404_part_a.py +0 -0
  995. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0404_part_b.py +0 -0
  996. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0405_part_a.py +0 -0
  997. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0406_part_a.py +0 -0
  998. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0410_part_a.py +0 -0
  999. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0410_part_b.py +0 -0
  1000. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0410_part_c.py +0 -0
  1001. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0420.py +0 -0
  1002. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0430_part_a.py +0 -0
  1003. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0430_part_b.py +0 -0
  1004. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0430_part_c.py +0 -0
  1005. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0430_part_d.py +0 -0
  1006. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0440_part_a.py +0 -0
  1007. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0440_part_b.py +0 -0
  1008. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0440_part_c.py +0 -0
  1009. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0440_part_d.py +0 -0
  1010. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0440_review_followups.py +0 -0
  1011. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0450.py +0 -0
  1012. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0460_part_a.py +0 -0
  1013. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0460_part_b.py +0 -0
  1014. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0470_part_a.py +0 -0
  1015. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0470_part_b.py +0 -0
  1016. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0480_part_a.py +0 -0
  1017. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0480_part_b.py +0 -0
  1018. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0490.py +0 -0
  1019. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0500_part_a.py +0 -0
  1020. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0500_part_b.py +0 -0
  1021. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0500_part_c.py +0 -0
  1022. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0500_part_d.py +0 -0
  1023. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0500_part_e.py +0 -0
  1024. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0510.py +0 -0
  1025. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0520.py +0 -0
  1026. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0530.py +0 -0
  1027. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v05310.py +0 -0
  1028. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v05311.py +0 -0
  1029. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0531_109.py +0 -0
  1030. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0531_139.py +0 -0
  1031. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0531_142.py +0 -0
  1032. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0531_82.py +0 -0
  1033. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0532.py +0 -0
  1034. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0533.py +0 -0
  1035. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0534.py +0 -0
  1036. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0535.py +0 -0
  1037. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0538.py +0 -0
  1038. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0539.py +0 -0
  1039. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0540.py +0 -0
  1040. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0550.py +0 -0
  1041. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0550_followups.py +0 -0
  1042. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0560.py +0 -0
  1043. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0570_part_a.py +0 -0
  1044. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0570_part_b.py +0 -0
  1045. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0570_part_c.py +0 -0
  1046. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0570_part_d.py +0 -0
  1047. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0580.py +0 -0
  1048. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0590.py +0 -0
  1049. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0600_part_a.py +0 -0
  1050. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0600_part_b.py +0 -0
  1051. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0600_part_c.py +0 -0
  1052. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0600_part_d.py +0 -0
  1053. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0600_part_e.py +0 -0
  1054. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0600_part_f.py +0 -0
  1055. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0610_part_a.py +0 -0
  1056. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0610_part_b.py +0 -0
  1057. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0610_part_c.py +0 -0
  1058. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0610_part_d.py +0 -0
  1059. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0610_part_e.py +0 -0
  1060. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0620_followups.py +0 -0
  1061. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0620_part_a.py +0 -0
  1062. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0620_part_b.py +0 -0
  1063. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0620_part_c.py +0 -0
  1064. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0620_part_d.py +0 -0
  1065. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0620_part_e.py +0 -0
  1066. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0630_followups.py +0 -0
  1067. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0630_part_a.py +0 -0
  1068. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0630_part_b.py +0 -0
  1069. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0630_part_c.py +0 -0
  1070. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0630_part_d.py +0 -0
  1071. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0630_part_e.py +0 -0
  1072. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0631_206.py +0 -0
  1073. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0640_followups.py +0 -0
  1074. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0640_part_a.py +0 -0
  1075. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0640_part_b.py +0 -0
  1076. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0640_part_c.py +0 -0
  1077. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0640_part_d.py +0 -0
  1078. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0640_part_e.py +0 -0
  1079. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0640_part_f.py +0 -0
  1080. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0650_followups.py +0 -0
  1081. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0650_part_a.py +0 -0
  1082. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0650_part_b.py +0 -0
  1083. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0650_part_c.py +0 -0
  1084. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0650_part_d.py +0 -0
  1085. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0650_part_e.py +0 -0
  1086. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0660_cli.py +0 -0
  1087. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0660_followups.py +0 -0
  1088. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0660_part_a.py +0 -0
  1089. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0660_part_b.py +0 -0
  1090. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0660_part_c.py +0 -0
  1091. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0660_part_d.py +0 -0
  1092. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0660_part_e.py +0 -0
  1093. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0670_followups.py +0 -0
  1094. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0670_part_a.py +0 -0
  1095. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0670_part_b.py +0 -0
  1096. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0670_part_c.py +0 -0
  1097. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0670_part_d.py +0 -0
  1098. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0670_part_e.py +0 -0
  1099. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0670_part_f.py +0 -0
  1100. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0680_followups.py +0 -0
  1101. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0680_part_a.py +0 -0
  1102. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0680_part_b.py +0 -0
  1103. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0680_part_c.py +0 -0
  1104. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0680_part_d.py +0 -0
  1105. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0680_part_e.py +0 -0
  1106. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0690_part_a.py +0 -0
  1107. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0690_part_b.py +0 -0
  1108. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0690_part_c.py +0 -0
  1109. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0690_part_d.py +0 -0
  1110. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0690_part_e.py +0 -0
  1111. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0700_part_a.py +0 -0
  1112. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0700_part_b.py +0 -0
  1113. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0700_part_c.py +0 -0
  1114. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0700_part_d.py +0 -0
  1115. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0700_part_e.py +0 -0
  1116. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0700_part_f.py +0 -0
  1117. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07110.py +0 -0
  1118. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07111.py +0 -0
  1119. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07112.py +0 -0
  1120. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07113.py +0 -0
  1121. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07114.py +0 -0
  1122. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07115.py +0 -0
  1123. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07116.py +0 -0
  1124. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07117.py +0 -0
  1125. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07118.py +0 -0
  1126. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07119.py +0 -0
  1127. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0712.py +0 -0
  1128. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07120.py +0 -0
  1129. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07121.py +0 -0
  1130. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07122.py +0 -0
  1131. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07123.py +0 -0
  1132. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07124.py +0 -0
  1133. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07125.py +0 -0
  1134. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07126.py +0 -0
  1135. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07127.py +0 -0
  1136. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07128.py +0 -0
  1137. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07129.py +0 -0
  1138. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0713.py +0 -0
  1139. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07130.py +0 -0
  1140. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07131.py +0 -0
  1141. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07132.py +0 -0
  1142. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07133.py +0 -0
  1143. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07134.py +0 -0
  1144. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07136.py +0 -0
  1145. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07137.py +0 -0
  1146. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07138.py +0 -0
  1147. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07139.py +0 -0
  1148. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0714.py +0 -0
  1149. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07140.py +0 -0
  1150. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07141.py +0 -0
  1151. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07141_telemetry_prompt.py +0 -0
  1152. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0715.py +0 -0
  1153. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0716.py +0 -0
  1154. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0717.py +0 -0
  1155. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0718.py +0 -0
  1156. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0719.py +0 -0
  1157. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07200.py +0 -0
  1158. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07204.py +0 -0
  1159. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07300.py +0 -0
  1160. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07302.py +0 -0
  1161. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_val_loss_end_to_end.py +0 -0
  1162. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_validator.py +0 -0
  1163. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_version_sync.py +0 -0
  1164. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_vision.py +0 -0
  1165. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_vllm_serve.py +0 -0
  1166. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_warmup.py +0 -0
  1167. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_why.py +0 -0
  1168. {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_windows_encoding.py +0 -0
@@ -2,7 +2,11 @@ name: CI
2
2
 
3
3
  on:
4
4
  push:
5
- branches: [main]
5
+ # `release/**` is here so a release branch gets the matrix on the exact
6
+ # tree that will be tagged. A pull request builds the MERGE of head and
7
+ # main, which for a release cut from an older tag is not the tree that
8
+ # ships, so a PR run cannot stand in for this one.
9
+ branches: [main, 'release/**']
6
10
  pull_request:
7
11
  branches: [main]
8
12
 
@@ -236,6 +240,13 @@ jobs:
236
240
  - uses: actions/setup-python@v5
237
241
  with:
238
242
  python-version: ${{ matrix.python-version }}
243
+ # The Web UI escaping tests run `safe_html.js` under node, and skip when
244
+ # node is absent. Runner images happen to ship one, so the skip would be
245
+ # silent: pin it, or the only tests that execute the real escaping logic
246
+ # can disappear without anything turning red.
247
+ - uses: actions/setup-node@v4
248
+ with:
249
+ node-version: "22"
239
250
  - name: Pin the HF cache to a deterministic path
240
251
  # Set here and not in the job-level `env:` block: the `runner` context
241
252
  # is not available there (only github / needs / strategy / matrix /
@@ -12,6 +12,22 @@ reproducing 70+ versions of notes.
12
12
 
13
13
  ## [Unreleased]
14
14
 
15
+ ## [0.75.1] - 2026-09-21
16
+
17
+ ### Fixed
18
+
19
+ - **A layer-streamed LoRA adapter saved as ZERO tensors under peft 0.21.0 (#1005 in #1010).** peft 0.21 selects an adapter's tensors by the prefixes it reads off `model.named_modules()` and keeps the matching `state_dict()` entries, where 0.20 filtered by the `lora_` substring; the streaming wrapper's module and parameter names carried `.inner.` while its `state_dict()` keys were canonical, so `trainer.save_model()`, every `save_steps` checkpoint and `get_peft_model_state_dict()` returned nothing, and nothing raised. The wrapper now enumerates the inner layer's tree at its own prefix (`named_modules()` / `named_children()`, with `train()` / `apply()` / `_apply()` reaching the inner layer explicitly), so names and keys are one spelling — which also keeps transformers' weight-decay grouping, built from `named_children()`, from silently dropping every LoRA parameter into the no-decay group. **Any adapter saved with `stream_layers: true` on peft>=0.21 before this fix holds zero tensors (a 40-byte `adapter_model.safetensors`, no error at save time) and cannot be recovered — re-train it on a Soup with this fix, or with `peft<0.21`.** Naming only; nothing on the streamed forward path changes. Ten peft-version-independent tests pin names == keys against a resident LoRA model; the four tests that documented the old asymmetry are inverted rather than deleted. No `peft<0.21` pin.
20
+
21
+ - **A Ctrl+C arriving immediately after the Lambda controller started could still leave the instance running (#1073 in #1078).** `submit_lambda_run` spawned the controller outside the `try` that absorbs interrupts, so a SIGINT delivered between `Popen` returning and the waiting loop being entered — or one landing on the "still waiting" notice, which is written from the interrupt handler — unwound the parent while the controller was still terminating the paid instance in its `finally` block. The spawn and the notice now sit inside the guarded region: once the child exists, every path leads back to `proc.wait()` and the controller's exit code remains what the function returns. An interrupt raised before the child exists still propagates unchanged, and a `wait()` failure that is not an interrupt still surfaces rather than being retried.
22
+
23
+ - `soup runs clean` now accepts `--no-keep-weights` to delete whole non-best checkpoints; `--keep-weights` (the default) keeps weights on every supported Click version — on Click 8.1 it previously deleted whole checkpoints (#1057)
24
+
25
+ - **Cloud runs keep their outputs and their cleanup (#1058).** `soup train --cloud modal` now writes run outputs to the `soup-outputs` Modal volume and downloads them to the local output directory when the run ends (also after a failed run); previously checkpoints were lost with the container. `soup train --cloud lambda --cloud-submit`: pressing Ctrl+C now waits for the controller to terminate the Lambda instance; previously the controller was killed 0.25 s later and the instance could keep running (Linux/macOS).
26
+
27
+ ### Security
28
+
29
+ - Hardening across the CLI, the inference server, the Web UI, MCP execution, config parsing and `.can` handling. A security advisory with details and upgrade guidance will be published alongside this release.
30
+
15
31
  ## [0.75.0] - 2026-09-12
16
32
 
17
33
  ### Added
@@ -4650,7 +4666,8 @@ what a fine-tune forgets and leaks.
4650
4666
  `SECURITY.md` (~220 KB). `SECURITY.md` is now a concise security policy; the
4651
4667
  detailed hardening notes remain in git history and the GitHub Releases notes.
4652
4668
 
4653
- [Unreleased]: https://github.com/MakazhanAlpamys/Soup/compare/v0.75.0...HEAD
4669
+ [Unreleased]: https://github.com/MakazhanAlpamys/Soup/compare/v0.75.1...HEAD
4670
+ [0.75.1]: https://github.com/MakazhanAlpamys/Soup/compare/v0.75.0...v0.75.1
4654
4671
  [0.75.0]: https://github.com/MakazhanAlpamys/Soup/compare/v0.74.0...v0.75.0
4655
4672
  [0.74.0]: https://github.com/MakazhanAlpamys/Soup/compare/v0.73.3...v0.74.0
4656
4673
  [0.73.1]: https://github.com/MakazhanAlpamys/Soup/compare/v0.73.0...v0.73.1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: soup-cli
3
- Version: 0.75.0
3
+ Version: 0.75.1
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
@@ -241,39 +241,27 @@ infrastructure instead of improving models. Soup fixes that.
241
241
 
242
242
  ## What's New
243
243
 
244
- **v0.75.0 — the same `soup.yaml` trained a different recipe on MLX than on transformers,
245
- silently.** Six training options were validated, documented, accepted — and read by nothing
246
- on that backend. **All 60 pull requests in this release came from outside the maintainer**,
247
- by 22 people.
248
-
249
- - **Breaking: an unknown config key now refuses the load.** v0.74 warned and named this
250
- release as the deadline. A typo like `quantizaton`, or a key that only exists on a newer
251
- Soup, used to be dropped while the run proceeded with the setting not applied; it now
252
- fails on the CLI (exit 1) and in the API (`ValueError`), naming the field you probably
253
- meant. The detector applies the root-level `lora:` remap the schema has honoured
254
- since v0.40.1, so that spelling is accepted, not refused; the two `soup fetch examples`
255
- files using it moved to the canonical `training.lora`. Every recipe and template loads
256
- clean, key names are escaped before they reach the terminal, and the scan is bounded.
257
- - **MLX honours the config it accepted.** `train_on_responses_only`, `warmup_ratio` /
258
- `scheduler` / `weight_decay` / `optimizer`, `max_grad_norm`, `gradient_accumulation_steps`
259
- and `gradient_checkpointing` were each validated and then dropped on `backend: mlx`. Only
260
- 8 of the 32 optimizer names have an MLX equivalent; the other 24 are refused by name
261
- instead of silently becoming AdamW. MLX also drives the live dashboard, the tracker and
262
- `soup ui`, and `soup doctor --config` lists the settings a backend does not read.
263
- - **Validation loss existed nowhere.** It was computed on every backend and thrown away:
264
- no metrics column, no event field, nothing on the panel. It is now recorded, streamed
265
- and displayed.
266
- - **Breaking: `grpo_variant: gspo` is the published sequence-level objective**
267
- (arXiv:2507.18071), replacing a column-centering heuristic in which a padding token also
268
- shifted the gradient of every row sharing its column. Existing gspo configs will not
269
- reproduce prior runs.
270
- - **Web UI read endpoints and SSE require auth**, with short-lived single-use tickets
271
- instead of a token in a query string; `--public` no longer serves `/docs` and
272
- `/openapi.json` to the LAN; and a training subprocess no longer hangs when nothing
273
- reads its output.
274
- - **`torch>=2.6.0`** closes v0.74.0's known limitation: at 2.5.1 `trl>=0.29` could not
275
- import and every preference trainer was dead. Also fixed: `training.loraplus_lr_ratio`
276
- crashed every run that set it, and `packing: true` raised on TRL 0.29.
244
+ **v0.75.1 — hardening, and cloud runs that keep what they produced.** A maintenance
245
+ release on top of v0.75.0: no new training features, and a few defaults that change when
246
+ you upgrade.
247
+
248
+ - **Hardening across the CLI, the inference server, the Web UI, MCP execution, config
249
+ parsing and `.can` handling.** Details in an advisory published with this release.
250
+ - **`soup runs clean` gained `--no-keep-weights`**, which deletes whole non-best
251
+ checkpoints rather than only their optimizer and scheduler states. `--keep-weights`
252
+ stays the default and now means the same thing on every supported Click version — on
253
+ Click 8.1 it used to delete whole checkpoints anyway.
254
+ - **Cloud runs keep their outputs.** `soup train --cloud modal` writes run outputs to the
255
+ `soup-outputs` Modal volume and downloads them into your local output directory when the
256
+ run ends, including after a failed run; checkpoints used to disappear with the container.
257
+ - **Ctrl+C on `soup train --cloud lambda --cloud-submit` waits for the controller** to
258
+ terminate the Lambda instance. The controller was previously killed a quarter of a
259
+ second later, which could leave a paid instance running (Linux/macOS).
260
+ - **Upgrading changes a few defaults.** `soup push --hub modelscope` and `--hub modelers`
261
+ read `MODELSCOPE_API_TOKEN` and `MODELERS_TOKEN` rather than `HF_TOKEN`, so one hub's
262
+ token is never offered to another; and an `https` judge URL whose host is not
263
+ `api.openai.com` is treated as an OpenAI-compatible server and called without
264
+ `OPENAI_API_KEY`.
277
265
 
278
266
  > Python **3.10–3.12** only. On 3.13+, pip used to resolve untested PyTorch wheels that
279
267
  > crash in the native extension before Soup runs at all.
@@ -87,39 +87,27 @@ infrastructure instead of improving models. Soup fixes that.
87
87
 
88
88
  ## What's New
89
89
 
90
- **v0.75.0 — the same `soup.yaml` trained a different recipe on MLX than on transformers,
91
- silently.** Six training options were validated, documented, accepted — and read by nothing
92
- on that backend. **All 60 pull requests in this release came from outside the maintainer**,
93
- by 22 people.
94
-
95
- - **Breaking: an unknown config key now refuses the load.** v0.74 warned and named this
96
- release as the deadline. A typo like `quantizaton`, or a key that only exists on a newer
97
- Soup, used to be dropped while the run proceeded with the setting not applied; it now
98
- fails on the CLI (exit 1) and in the API (`ValueError`), naming the field you probably
99
- meant. The detector applies the root-level `lora:` remap the schema has honoured
100
- since v0.40.1, so that spelling is accepted, not refused; the two `soup fetch examples`
101
- files using it moved to the canonical `training.lora`. Every recipe and template loads
102
- clean, key names are escaped before they reach the terminal, and the scan is bounded.
103
- - **MLX honours the config it accepted.** `train_on_responses_only`, `warmup_ratio` /
104
- `scheduler` / `weight_decay` / `optimizer`, `max_grad_norm`, `gradient_accumulation_steps`
105
- and `gradient_checkpointing` were each validated and then dropped on `backend: mlx`. Only
106
- 8 of the 32 optimizer names have an MLX equivalent; the other 24 are refused by name
107
- instead of silently becoming AdamW. MLX also drives the live dashboard, the tracker and
108
- `soup ui`, and `soup doctor --config` lists the settings a backend does not read.
109
- - **Validation loss existed nowhere.** It was computed on every backend and thrown away:
110
- no metrics column, no event field, nothing on the panel. It is now recorded, streamed
111
- and displayed.
112
- - **Breaking: `grpo_variant: gspo` is the published sequence-level objective**
113
- (arXiv:2507.18071), replacing a column-centering heuristic in which a padding token also
114
- shifted the gradient of every row sharing its column. Existing gspo configs will not
115
- reproduce prior runs.
116
- - **Web UI read endpoints and SSE require auth**, with short-lived single-use tickets
117
- instead of a token in a query string; `--public` no longer serves `/docs` and
118
- `/openapi.json` to the LAN; and a training subprocess no longer hangs when nothing
119
- reads its output.
120
- - **`torch>=2.6.0`** closes v0.74.0's known limitation: at 2.5.1 `trl>=0.29` could not
121
- import and every preference trainer was dead. Also fixed: `training.loraplus_lr_ratio`
122
- crashed every run that set it, and `packing: true` raised on TRL 0.29.
90
+ **v0.75.1 — hardening, and cloud runs that keep what they produced.** A maintenance
91
+ release on top of v0.75.0: no new training features, and a few defaults that change when
92
+ you upgrade.
93
+
94
+ - **Hardening across the CLI, the inference server, the Web UI, MCP execution, config
95
+ parsing and `.can` handling.** Details in an advisory published with this release.
96
+ - **`soup runs clean` gained `--no-keep-weights`**, which deletes whole non-best
97
+ checkpoints rather than only their optimizer and scheduler states. `--keep-weights`
98
+ stays the default and now means the same thing on every supported Click version — on
99
+ Click 8.1 it used to delete whole checkpoints anyway.
100
+ - **Cloud runs keep their outputs.** `soup train --cloud modal` writes run outputs to the
101
+ `soup-outputs` Modal volume and downloads them into your local output directory when the
102
+ run ends, including after a failed run; checkpoints used to disappear with the container.
103
+ - **Ctrl+C on `soup train --cloud lambda --cloud-submit` waits for the controller** to
104
+ terminate the Lambda instance. The controller was previously killed a quarter of a
105
+ second later, which could leave a paid instance running (Linux/macOS).
106
+ - **Upgrading changes a few defaults.** `soup push --hub modelscope` and `--hub modelers`
107
+ read `MODELSCOPE_API_TOKEN` and `MODELERS_TOKEN` rather than `HF_TOKEN`, so one hub's
108
+ token is never offered to another; and an `https` judge URL whose host is not
109
+ `api.openai.com` is treated as an OpenAI-compatible server and called without
110
+ `OPENAI_API_KEY`.
123
111
 
124
112
  > Python **3.10–3.12** only. On 3.13+, pip used to resolve untested PyTorch wheels that
125
113
  > crash in the native extension before Soup runs at all.
@@ -1,4 +1,4 @@
1
- <!-- synced-from: README.md sha256:5ceff359925678608a55dc8a4d522221b75668b10e659aa4f0dd05a28f2eb1c4 -->
1
+ <!-- synced-from: README.md sha256:b524929506f026bba7a1f4522d3273328123c696a31b72dd1c7c4bee993a8fd4 -->
2
2
  <p align="center">🌍 <a href="README.md">English</a> | <strong>Türkçe</strong></p>
3
3
 
4
4
  <p align="center">
@@ -88,39 +88,30 @@ yerine altyapıyla boğuşarak geçiriyor. Soup bunu çözer.
88
88
 
89
89
  ## Yenilikler
90
90
 
91
- **v0.75.0 — aynı `soup.yaml`, MLX'te transformers'takinden farklı bir tarif eğitiyordu,
92
- sessizce.** Altı eğitim seçeneği doğrulanıyor, belgeleniyor, kabul ediliyor — ve o arka uçta
93
- hiçbir şey tarafından okunmuyordu. **Bu sürümdeki 60 pull request'in tamamı bakımcı dışından
94
- geldi**, 22 kişiden.
95
-
96
- - **Geriye dönük uyumsuz: bilinmeyen bir yapılandırma anahtarı artık yüklemeyi reddediyor.**
97
- v0.74 uyarı vermiş ve son tarih olarak bu sürümü adlandırmıştı. `quantizaton` gibi bir yazım
98
- hatası ya da yalnızca daha yeni bir Soup'ta bulunan bir anahtar eskiden atılıyor ve
99
- çalıştırma o ayar uygulanmadan devam ediyordu; artık CLI'da (çıkış kodu 1) ve API'de
100
- (`ValueError`) başarısız oluyor ve muhtemelen kastettiğiniz alanı adlandırıyor. Dedektör,
101
- şemanın v0.40.1'den beri tanıdığı üst düzey `lora:` yeniden eşlemesini uyguluyor; yani bu
102
- yazım reddedilmiyor, kabul ediliyor. Onu kullanan iki `soup fetch examples` dosyası kanonik
103
- `training.lora` biçimine taşındı. Her tarif ve şablon temiz yükleniyor, anahtar adları
104
- terminale ulaşmadan önce kaçışlanıyor ve tarama sınırlı.
105
- - **MLX, kabul ettiği yapılandırmaya uyuyor.** `train_on_responses_only`, `warmup_ratio` /
106
- `scheduler` / `weight_decay` / `optimizer`, `max_grad_norm`, `gradient_accumulation_steps`
107
- ve `gradient_checkpointing`, `backend: mlx` üzerinde tek tek doğrulanıp sonra düşürülüyordu.
108
- 32 optimizer adından yalnızca 8'inin MLX karşılığı var; diğer 24'ü sessizce AdamW'ye
109
- dönüşmek yerine adıyla reddediliyor. MLX ayrıca canlı panoyu, izleyiciyi ve `soup ui`'yi
110
- sürüyor; `soup doctor --config` ise bir arka ucun okumadığı ayarları listeliyor.
111
- - **Doğrulama kaybı hiçbir yerde yoktu.** Her arka uçta hesaplanıp atılıyordu: metrik sütunu
112
- yok, olay alanı yok, panoda hiçbir şey yok. Artık kaydediliyor, akıtılıyor ve gösteriliyor.
113
- - **Geriye dönük uyumsuz: `grpo_variant: gspo`, yayımlanmış dizi düzeyi hedef fonksiyonudur**
114
- (arXiv:2507.18071); bir dolgu belirtecinin aynı sütunu paylaşan her satırın gradyanını da
115
- kaydırdığı sütun merkezleme sezgiselinin yerini alıyor. Mevcut gspo yapılandırmaları önceki
116
- çalıştırmaları yeniden üretmeyecek.
117
- - **Web arayüzünün okuma uç noktaları ve SSE, kimlik doğrulama gerektiriyor**; sorgu
118
- dizesindeki bir belirteç yerine kısa ömürlü, tek kullanımlık biletlerle. `--public` artık
119
- `/docs` ve `/openapi.json`'ı yerel ağa sunmuyor; eğitim alt süreci de çıktısını kimse
120
- okumadığında artık askıda kalmıyor.
121
- - **`torch>=2.6.0`**, v0.74.0'ın bilinen sınırlamasını kapatıyor: 2.5.1'de `trl>=0.29` içe
122
- aktarılamıyor ve her tercih eğiticisi ölüydü. Ayrıca düzeltildi: `training.loraplus_lr_ratio`
123
- onu ayarlayan her çalıştırmayı çökertiyordu ve `packing: true` TRL 0.29'da hata veriyordu.
91
+ **v0.75.1 — sıkılaştırma ve ürettiğini koruyan bulut çalıştırmaları.** v0.75.0'ın üzerine
92
+ bir bakım sürümü: yeni eğitim özelliği yok, ama yükseltirken değişen birkaç varsayılan var.
93
+
94
+ - **CLI, çıkarım sunucusu, Web arayüzü, MCP yürütmesi, yapılandırma ayrıştırması ve `.can`
95
+ işlemesi genelinde sıkılaştırma.** Ayrıntılar bu sürümle birlikte yayımlanan bir danışma
96
+ belgesinde.
97
+ - **`soup runs clean` artık `--no-keep-weights` seçeneğini kabul ediyor**; bu seçenek, en
98
+ iyi olmayan kontrol noktalarını yalnızca optimizer ve zamanlayıcı durumlarıyla değil
99
+ bütünüyle siliyor. `--keep-weights` varsayılan olarak kalıyor ve artık desteklenen her
100
+ Click sürümünde aynı anlama geliyor — Click 8.1'de eskiden kontrol noktalarının tamamını
101
+ yine de siliyordu.
102
+ - **Bulut çalıştırmaları çıktılarını koruyor.** `soup train --cloud modal`, çalıştırma
103
+ çıktılarını `soup-outputs` Modal birimine yazıyor ve çalıştırma bittiğinde — başarısız
104
+ bir çalıştırmadan sonra da — yerel çıktı dizininize indiriyor; kontrol noktaları eskiden
105
+ kapsayıcıyla birlikte kayboluyordu.
106
+ - **`soup train --cloud lambda --cloud-submit` sırasında Ctrl+C artık denetleyicinin**
107
+ Lambda örneğini sonlandırmasını bekliyor. Denetleyici eskiden çeyrek saniye sonra
108
+ öldürülüyordu, bu da ücretli bir örneğin çalışmaya devam etmesine yol açabiliyordu
109
+ (Linux/macOS).
110
+ - **Yükseltmek birkaç varsayılanı değiştiriyor.** `soup push --hub modelscope` ve
111
+ `--hub modelers`, `HF_TOKEN` yerine `MODELSCOPE_API_TOKEN` ve `MODELERS_TOKEN` okuyor;
112
+ böylece bir hub'ın belirteci hiçbir zaman başka bir hub'a sunulmuyor. Ayrıca ana
113
+ makinesi `api.openai.com` olmayan bir `https` yargıç URL'si, OpenAI uyumlu bir sunucu
114
+ olarak kabul edilip `OPENAI_API_KEY` olmadan çağrılıyor.
124
115
 
125
116
  > Yalnızca Python **3.10–3.12**. 3.13+ sürümlerinde pip, Soup daha hiç çalışmadan yerel
126
117
  > eklentide çöken, test edilmemiş PyTorch tekerleklerini çözümlüyordu.
@@ -524,7 +524,8 @@ soup adapters verify ./adapter --public-key trusted.pub
524
524
  ```
525
525
 
526
526
  `verify` fails closed — any tamper, wrong/missing/unreadable key, or a
527
- signature from an untrusted key marks the adapter invalid. Signing keys and
527
+ signature from an untrusted key marks the adapter invalid. With `--public-key`,
528
+ an adapter whose signature record is not `ed25519` is also invalid. Signing keys and
528
529
  trusted public keys are symlink-rejected and size-capped but **not**
529
530
  cwd-contained (keys are secrets that live outside the project). Signature
530
531
  persists as `.soup-signature.json` (atomic write). `sigstore` keyless signing
@@ -221,6 +221,12 @@ soup train --config soup.yaml --cloud modal --gpu a100 --cloud-submit
221
221
  `soup_modal_app.py` builds an image with `soup-cli[train]` pinned to your running version, writes
222
222
  the embedded config inside the container, and runs `soup train` on the chosen GPU.
223
223
 
224
+ Run outputs are written to the `soup-outputs` Modal volume (created on first use), in a directory
225
+ named after the run (`soup-<12 hex>`), so checkpoints outlive the container. When the run ends,
226
+ including after a failed run, the app downloads every file in that directory into your local
227
+ output directory and prints a `modal volume get soup-outputs /<run name> <output dir> --force`
228
+ command that retries the download; that command places the files under `<output dir>/<run name>`.
229
+
224
230
  ### RunPod (Planned)
225
231
 
226
232
  RunPod support is currently in development and descoped from live CLI dispatch pending automated
@@ -233,6 +239,10 @@ Lambda uses an instance rather than a serverless function. The generated local c
233
239
  secret-free cloud-init script as API `user_data`, waits for it over SSH, copies the configured
234
240
  output back, and requests instance termination in a `finally` block. Keep the controller running
235
241
  until it reports that termination succeeded; shutting down the guest does not terminate billing.
242
+ Pressing Ctrl+C during `--cloud-submit` interrupts the controller, which still runs that `finally`
243
+ block, and `soup` waits for it to terminate the instance and exit rather than killing it; the only
244
+ way to skip that cleanup is to kill the controller process itself (for example with `kill` from
245
+ another terminal), which can leave the instance running.
236
246
 
237
247
  Register the public half of an SSH key with Lambda first, then set:
238
248
 
@@ -373,7 +383,7 @@ soup runs clean run_202611...
373
383
  soup runs clean --all --dry-run
374
384
  ```
375
385
 
376
- By default, the `clean` command operates in "surgical mode" (`--keep-weights`), deleting huge optimizer state files (`optimizer.pt`) from lesser checkpoints to save gigabytes, but keeping their lightweight evaluation weights just in case you want to load them later.
386
+ By default, the `clean` command operates in "surgical mode" (`--keep-weights`), deleting huge optimizer state files (`optimizer.pt`) from lesser checkpoints to save gigabytes, but keeping their lightweight evaluation weights just in case you want to load them later. Pass `--no-keep-weights` to delete whole non-best checkpoints instead (the checkpoint with the lowest loss is always kept); combine it with `--dry-run` to see what would go first.
377
387
 
378
388
 
379
389
  ## Alternative Model Hubs
@@ -397,6 +407,9 @@ The endpoint validator follows the same SSRF rules as `HF_ENDPOINT`: only `http`
397
407
 
398
408
  The hub adapter is schema-only in this release; the live downloader and uploader land in v0.51.1.
399
409
 
410
+ `soup push --hub modelscope` authenticates with `--token` or `MODELSCOPE_API_TOKEN`; `--hub modelers`
411
+ with `--token` or `MODELERS_TOKEN`. Neither reads `HF_TOKEN`.
412
+
400
413
 
401
414
  ## TensorBoard Integration
402
415
 
@@ -437,3 +437,4 @@ mutating tools (`train_start`, `export`) are gated behind `--allow-mutating`
437
437
  - **Subprocess Isolation:** Execution runs the Soup CLI as an isolated subprocess (`shell=False`, `stdin=DEVNULL`, `cwd` pinned to server startup directory). Child stdout/stderr is redirected to `.soup/mcp-runs/<run_id>.log` to avoid corrupting the MCP JSON-RPC stdio stream.
438
438
  - **Concurrency & Disconnects:** Enforces 1 active execution at a time, gated on a persisted run whose process is still alive — so a **restarted** server does not launch a second training while a child from a previous server is still running, and a stale record whose process is gone never blocks execution. A `launching` record (committed before the child process exists, pid not yet written) blocks restart capacity too: it is indistinguishable from "about to spawn", so treating it as live is the safe direction after a crash in that window. If a server crash leaves that row behind, `soup mcp runs reconcile --expunge-launching` removes rows older than five minutes and prints every removed `run_id`; use `--older-than-seconds N` to choose another positive threshold. The command refuses the whole operation if any candidate records a PID that is still alive. Launches run in background (fire-and-forget). Disconnecting the MCP client does not terminate an already-running subprocess.
439
439
  - **Config Snapshotting & Input Revalidation:** At plan time (`train_start`), the validated config is snapshotted to `.soup/mcp-runs/<run_id>/config.yaml`, and execution uses this snapshot rather than the original mutable config path. External protected inputs (such as datasets and model/checkpoint directories or files) are not frozen in the snapshot; instead, their content digests (computed via SHA-256 for regular files, or deterministic recursive content hashing over sorted relative file paths for directory trees, bounded by file-count and total-byte safety limits) are recorded at plan time and revalidated immediately before spawn. Modifying an external protected input between plan and execute invalidates the token. Modifying the original config path after planning has no effect because execution strictly uses the snapshotted config. Snapshotting freezes only the configuration itself, not external filesystem assets.
440
+ - **Every Local Input Is Pinned:** A train plan pins every local file or directory the run reads (model, datasets, reward/teacher/PRM models, reward `.py` files, unlearning sets); an input outside the working directory is refused at plan time, and an input that did not exist at plan time must still not exist at execution.
@@ -218,6 +218,8 @@ tasks:
218
218
  judge_model: ollama://llama3.1 # SSRF-allowlisted scheme
219
219
  ```
220
220
 
221
+ `judge_model` accepts `ollama://<model>`, `http://localhost:<port>/<model>` or `https://<host>/<model>`. An `https://` judge URL uses `OPENAI_API_KEY` only when its host is `api.openai.com`; other hosts are called as an OpenAI-compatible server without that key.
222
+
221
223
  Baselines may be a registry reference (`registry://<name-or-id>`), a file path, or omitted for the first run. Any structured exception (`ValueError`, `FileNotFoundError`, `OSError`) during the gate is treated as a regression under `on_regression: stop`.
222
224
 
223
225
 
@@ -516,6 +516,15 @@ output: ./output
516
516
  >
517
517
  > If that prints anything, the adapter is affected. From v0.72.1 a streamed adapter is byte-for-byte in the same layout as an ordinary LoRA run.
518
518
 
519
+ > **peft 0.21.0 (released 2026-09-15) saved a streamed adapter EMPTY on every Soup before the #1005 fix — re-run those trainings.** peft 0.21 selects the adapter tensors to save by the prefixes it reads off `model.named_modules()`; the streaming wrapper's module names carried an `.inner.` segment its saved keys did not, so `trainer.save_model()`, every `save_steps` checkpoint and `PeftModel.save_pretrained()` wrote a 40-byte `adapter_model.safetensors` holding **zero** tensors, training reported success, and `--resume` loaded nothing. The training itself was correct — only the file is empty, and nothing in it can be recovered. Check with:
520
+ >
521
+ > ```bash
522
+ > python -c "from safetensors.torch import load_file; \
523
+ > print(len(load_file('adapter_model.safetensors')))"
524
+ > ```
525
+ >
526
+ > `0` means the adapter is lost. Fixed on `main` by PR #1010 (the wrapper now reports canonical names, so peft 0.20 and 0.21 both save every tensor; no `peft<0.21` pin); the next release carries it. Until you run a Soup with that fix, `pip install "peft<0.21"` is the workaround.
527
+
519
528
  **Troubleshooting:**
520
529
  - **"trainable LoRA parameters remain on the meta device"** — PEFT attached an
521
530
  adapter without real storage and Soup refused the run before installing the
@@ -425,7 +425,7 @@ curl http://localhost:8000/v1/adapters
425
425
  # → {"adapters": [{"name": "chat", "active": true}, ...], "active": "chat"}
426
426
  ```
427
427
 
428
- Names are validated against `^[a-zA-Z0-9][a-zA-Z0-9-]*$`; activate/deactivate calls are thread-safe behind a lock.
428
+ Names are validated against `^[a-zA-Z0-9][a-zA-Z0-9-]*$`; activate/deactivate calls are thread-safe behind a lock. Activate/deactivate also check the `Host` and `Origin` headers (see [Server-Side Tool Endpoints](#server-side-tool-endpoints)).
429
429
 
430
430
  ### Multi-Tenant Vector Bank (`soup serve --bank`)
431
431
 
@@ -559,6 +559,8 @@ soup ui
559
559
 
560
560
  **Security:** The Web UI generates a random auth token at startup (printed to console). Every private endpoint — mutating (start/stop training, delete runs, inspect data, validate config) and reading (runs, metrics, system, recipes, SSE streams) — requires an `Authorization: Bearer <token>` header. `/` and `/api/health` stay open so the dashboard can load. CORS is restricted to the served origin. Data inspection is sandboxed to the working directory.
561
561
 
562
+ **Content policy.** Every Web UI response carries a `Content-Security-Policy` that allows scripts only from the UI's own origin and the pinned Chart.js file (no inline script, no `eval`), plus `X-Content-Type-Options: nosniff`, `Referrer-Policy: no-referrer` and `X-Frame-Options: DENY`. Chart.js is loaded with a Subresource Integrity hash, so the browser refuses it if the CDN serves different bytes. The UI's markup carries no inline event handlers, and every server- or dataset-derived value is escaped before it is rendered. The loopback-only `/docs`, `/docs/oauth2-redirect` and `/redoc` pages are the one exception to the policy header, because FastAPI's interactive docs start from an inline script.
563
+
562
564
  **Interactive API docs are loopback-only.** `/openapi.json`, `/docs`, `/docs/oauth2-redirect` and `/redoc` serve on a loopback bind and are **absent** (404) on any other, including `soup ui --public`. This is deliberate rather than incidental: the schema exposes no run data, configuration or logs, but it does describe every route, parameter and request/response shape, and on a LAN bind that is free reconnaissance. Gating them behind the token instead was rejected — `/docs` is a browser navigation and Swagger cannot attach a Bearer header to it, so gating would break the page for a developer while leaving `/openapi.json` readable by any HTTP client. If you need the schema while bound publicly, read it from a loopback instance of the same version.
563
565
 
564
566
  ```bash
@@ -767,3 +769,14 @@ Three POST routes are now available on `soup serve`:
767
769
  HTTP 501 when strict OS isolation is unavailable (including on Windows or restricted
768
770
  Linux containers).
769
771
 
772
+ Tool routes, `/v1/thumbs` and adapter activate/deactivate accept requests only when the
773
+ `Host` header names the bound address (any loopback name for a loopback bind) and any
774
+ `Origin` header names the same; otherwise they answer 421 or 403.
775
+
776
+ The generation routes (`/v1/chat/completions`, `/v1/messages`) and the adapter listing
777
+ (`GET /v1/adapters`) carry the narrower half of that check: a request whose `Origin` names
778
+ another site is refused with 403, so a page the operator merely visits cannot drive
779
+ generation on their server or enumerate the loaded adapters — CORS alone would only stop
780
+ that page *reading* the reply, not sending the request. Requests that carry no `Origin` at
781
+ all — curl, the OpenAI/Anthropic SDKs, a reverse proxy — are unaffected, and `Host` is not
782
+ checked on these routes, so a proxy can still front them under its own hostname.
@@ -646,6 +646,8 @@ The judge is Soup's own OpenAI-compatible `JudgeEvaluator` adapted to TRL's
646
646
  `BasePairwiseJudge` (swap-debiased: a winner is only recorded when both A,B and
647
647
  B,A orders agree). Recipe: `online-dpo-smollm2-135m`. Proof-of-mechanism was
648
648
  validated on SmolLM2-135M with a synthetic judge (not a production RLHF claim; #286).
649
+ An `https://` judge URL uses `OPENAI_API_KEY` only when its host is `api.openai.com`; other
650
+ hosts are called as an OpenAI-compatible server without that key.
649
651
 
650
652
 
651
653
  ## Weighted Multi-Objective Preference Loss
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "soup-cli"
7
- version = "0.75.0"
7
+ version = "0.75.1"
8
8
  description = "Fine-tune and post-train LLMs in one command. No SSH, no config hell."
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
@@ -1,3 +1,3 @@
1
1
  """Soup CLI — Fine-tune and post-train LLMs in one command."""
2
2
 
3
- __version__ = "0.75.0"
3
+ __version__ = "0.75.1"
@@ -18,7 +18,7 @@ from pathlib import Path
18
18
  from typing import Callable, Optional
19
19
 
20
20
  from soup_cli.cans.schema import DeployTarget, Manifest
21
- from soup_cli.cans.unpack import extract_can, inspect_can
21
+ from soup_cli.cans.unpack import extract_can, inspect_can, read_config
22
22
  from soup_cli.utils.paths import is_under_cwd
23
23
 
24
24
  _RUN_TIMEOUT_SECONDS = 60 * 60 * 24 # 24h max — generous; user kills with ^C
@@ -130,10 +130,27 @@ def _deploy_target(target: DeployTarget, extract_dir: Path) -> int:
130
130
  "--name", target.name,
131
131
  ])
132
132
  if target.kind == "gguf":
133
- # Already extracted — just confirm presence.
133
+ # Already extracted — just confirm presence, but verify the manifest's
134
+ # path really resolves inside extract_dir first. ``target.path`` comes
135
+ # from the can, so an absolute path (pathlib drops the left operand
136
+ # when the right one is absolute), a ``..`` segment, or a symlink
137
+ # planted in the can would otherwise reach an arbitrary file on disk.
138
+ # Same containment pattern as the kind=ollama branch above; the
139
+ # DeployTarget field validator is the first line, this is the second.
134
140
  if not target.path:
135
141
  raise ValueError("deploy_target kind=gguf requires 'path'")
136
- gguf_path = (extract_dir / target.path).resolve()
142
+ extract_real = os.path.realpath(str(extract_dir))
143
+ gguf_real = os.path.realpath(str(extract_dir / target.path))
144
+ try:
145
+ common = os.path.commonpath([extract_real, gguf_real])
146
+ except ValueError: # different drives on Windows — never contained
147
+ common = ""
148
+ if common != extract_real or gguf_real == extract_real:
149
+ raise ValueError(
150
+ f"deploy gguf path '{target.path}' escapes the can extract "
151
+ f"dir - refusing"
152
+ )
153
+ gguf_path = Path(gguf_real)
137
154
  if not gguf_path.exists():
138
155
  raise FileNotFoundError(f"deploy gguf path not found: {gguf_path}")
139
156
  return 0
@@ -180,6 +197,10 @@ def run_can(
180
197
 
181
198
  # Read manifest first — surface schema errors before any side effects.
182
199
  manifest = inspect_can(str(src))
200
+ # The extracted config.yaml is handed to ``soup train``, whose loader has
201
+ # no size or expansion limit of its own; read it through the capped reader
202
+ # first so an oversized or alias-amplified config is refused here.
203
+ read_config(str(src))
183
204
 
184
205
  if not yes:
185
206
  if confirm_callback is None:
@@ -8,6 +8,8 @@ from typing import Literal, Optional
8
8
 
9
9
  from pydantic import BaseModel, Field, field_validator
10
10
 
11
+ from soup_cli.utils.yaml_limits import check_expanded_nodes
12
+
11
13
  CAN_FORMAT_VERSION = 3 # v0.71.3 #182: attestations field (additive over v2)
12
14
  SUPPORTED_CAN_FORMAT_VERSIONS = (1, 2, 3)
13
15
 
@@ -28,6 +30,11 @@ def validate_attestation_statement(stmt: object) -> dict:
28
30
  """
29
31
  if not isinstance(stmt, dict):
30
32
  raise ValueError("attestation must be a dict (in-toto Statement)")
33
+ # Before json.dumps: a statement loaded from YAML may share references
34
+ # (anchors / aliases) whose serialised form is exponentially larger. Every
35
+ # node costs at least one byte of JSON, so a statement within the byte cap
36
+ # below has fewer nodes than _MAX_ATTESTATION_BYTES and always passes.
37
+ check_expanded_nodes(stmt, "attestation", limit=_MAX_ATTESTATION_BYTES)
31
38
  type_field = stmt.get("_type")
32
39
  predicate_type = stmt.get("predicateType")
33
40
  if not isinstance(type_field, str) or not type_field: