soup-cli 0.71.5__tar.gz → 0.71.6__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 (784) hide show
  1. soup_cli-0.71.6/.mailmap +8 -0
  2. {soup_cli-0.71.5 → soup_cli-0.71.6}/CHANGELOG.md +47 -0
  3. {soup_cli-0.71.5 → soup_cli-0.71.6}/CONTRIBUTING.md +17 -2
  4. soup_cli-0.71.6/CONTRIBUTORS.md +43 -0
  5. {soup_cli-0.71.5 → soup_cli-0.71.6}/PKG-INFO +15 -17
  6. {soup_cli-0.71.5 → soup_cli-0.71.6}/README.md +14 -16
  7. {soup_cli-0.71.5 → soup_cli-0.71.6}/docs/commands.md +4 -3
  8. {soup_cli-0.71.5 → soup_cli-0.71.6}/docs/data.md +10 -6
  9. {soup_cli-0.71.5 → soup_cli-0.71.6}/docs/evaluation.md +4 -1
  10. {soup_cli-0.71.5 → soup_cli-0.71.6}/pyproject.toml +1 -1
  11. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/__init__.py +1 -1
  12. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/_eval_v0650.py +26 -3
  13. soup_cli-0.71.6/src/soup_cli/commands/build.py +92 -0
  14. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/data.py +126 -47
  15. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/providers/ollama.py +4 -1
  16. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/providers/vllm.py +4 -1
  17. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/build_dag.py +482 -10
  18. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/_common.py +64 -0
  19. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/memorization.py +57 -12
  20. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/irt.py +199 -2
  21. soup_cli-0.71.6/src/soup_cli/utils/magpie.py +595 -0
  22. soup_cli-0.71.6/tests/qa/v0716_qa.md +110 -0
  23. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0690_part_a.py +25 -9
  24. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0690_part_c.py +18 -8
  25. soup_cli-0.71.6/tests/test_v0716.py +1723 -0
  26. soup_cli-0.71.5/src/soup_cli/commands/build.py +0 -67
  27. soup_cli-0.71.5/src/soup_cli/utils/magpie.py +0 -164
  28. {soup_cli-0.71.5 → soup_cli-0.71.6}/.dockerignore +0 -0
  29. {soup_cli-0.71.5 → soup_cli-0.71.6}/.github/FUNDING.yml +0 -0
  30. {soup_cli-0.71.5 → soup_cli-0.71.6}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  31. {soup_cli-0.71.5 → soup_cli-0.71.6}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  32. {soup_cli-0.71.5 → soup_cli-0.71.6}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  33. {soup_cli-0.71.5 → soup_cli-0.71.6}/.github/pull_request_template.md +0 -0
  34. {soup_cli-0.71.5 → soup_cli-0.71.6}/.github/workflows/ci.yml +0 -0
  35. {soup_cli-0.71.5 → soup_cli-0.71.6}/.github/workflows/docker.yml +0 -0
  36. {soup_cli-0.71.5 → soup_cli-0.71.6}/.github/workflows/publish.yml +0 -0
  37. {soup_cli-0.71.5 → soup_cli-0.71.6}/.github/workflows/recipe-validation.yml +0 -0
  38. {soup_cli-0.71.5 → soup_cli-0.71.6}/.gitignore +0 -0
  39. {soup_cli-0.71.5 → soup_cli-0.71.6}/.pre-commit-config.yaml +0 -0
  40. {soup_cli-0.71.5 → soup_cli-0.71.6}/AGENTS.md +0 -0
  41. {soup_cli-0.71.5 → soup_cli-0.71.6}/CODEOWNERS +0 -0
  42. {soup_cli-0.71.5 → soup_cli-0.71.6}/CODE_OF_CONDUCT.md +0 -0
  43. {soup_cli-0.71.5 → soup_cli-0.71.6}/Dockerfile +0 -0
  44. {soup_cli-0.71.5 → soup_cli-0.71.6}/LICENSE +0 -0
  45. {soup_cli-0.71.5 → soup_cli-0.71.6}/NOTICE +0 -0
  46. {soup_cli-0.71.5 → soup_cli-0.71.6}/SECURITY.md +0 -0
  47. {soup_cli-0.71.5 → soup_cli-0.71.6}/docker-compose.yml +0 -0
  48. {soup_cli-0.71.5 → soup_cli-0.71.6}/docs/README.md +0 -0
  49. {soup_cli-0.71.5 → soup_cli-0.71.6}/docs/adapters-and-governance.md +0 -0
  50. {soup_cli-0.71.5 → soup_cli-0.71.6}/docs/backends-and-ops.md +0 -0
  51. {soup_cli-0.71.5 → soup_cli-0.71.6}/docs/models.md +0 -0
  52. {soup_cli-0.71.5 → soup_cli-0.71.6}/docs/peft-and-efficiency.md +0 -0
  53. {soup_cli-0.71.5 → soup_cli-0.71.6}/docs/performance-and-quantization.md +0 -0
  54. {soup_cli-0.71.5 → soup_cli-0.71.6}/docs/serving-and-export.md +0 -0
  55. {soup_cli-0.71.5 → soup_cli-0.71.6}/docs/training.md +0 -0
  56. {soup_cli-0.71.5 → soup_cli-0.71.6}/examples/README.md +0 -0
  57. {soup_cli-0.71.5 → soup_cli-0.71.6}/examples/configs/dpo_chat.yaml +0 -0
  58. {soup_cli-0.71.5 → soup_cli-0.71.6}/examples/configs/dpo_example.yaml +0 -0
  59. {soup_cli-0.71.5 → soup_cli-0.71.6}/examples/configs/grpo_reasoning.yaml +0 -0
  60. {soup_cli-0.71.5 → soup_cli-0.71.6}/examples/configs/rlhf_step1_sft.yaml +0 -0
  61. {soup_cli-0.71.5 → soup_cli-0.71.6}/examples/configs/rlhf_step2_reward.yaml +0 -0
  62. {soup_cli-0.71.5 → soup_cli-0.71.6}/examples/configs/rlhf_step3_ppo.yaml +0 -0
  63. {soup_cli-0.71.5 → soup_cli-0.71.6}/examples/configs/sft_basic.yaml +0 -0
  64. {soup_cli-0.71.5 → soup_cli-0.71.6}/examples/configs/vision_llama.yaml +0 -0
  65. {soup_cli-0.71.5 → soup_cli-0.71.6}/examples/data/alpaca_tiny.jsonl +0 -0
  66. {soup_cli-0.71.5 → soup_cli-0.71.6}/examples/data/chat_preferences.jsonl +0 -0
  67. {soup_cli-0.71.5 → soup_cli-0.71.6}/examples/data/dpo_sample.jsonl +0 -0
  68. {soup_cli-0.71.5 → soup_cli-0.71.6}/examples/data/reasoning_math.jsonl +0 -0
  69. {soup_cli-0.71.5 → soup_cli-0.71.6}/examples/synthetic_workflow.md +0 -0
  70. {soup_cli-0.71.5 → soup_cli-0.71.6}/examples/synthetic_workflow.yaml +0 -0
  71. {soup_cli-0.71.5 → soup_cli-0.71.6}/soup.png +0 -0
  72. {soup_cli-0.71.5 → soup_cli-0.71.6}/soup_logo_svg.svg +0 -0
  73. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/__main__.py +0 -0
  74. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/autopilot/__init__.py +0 -0
  75. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/autopilot/analyzer.py +0 -0
  76. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/autopilot/decisions.py +0 -0
  77. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/autopilot/generate_config.py +0 -0
  78. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/cans/__init__.py +0 -0
  79. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/cans/pack.py +0 -0
  80. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/cans/publish.py +0 -0
  81. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/cans/run.py +0 -0
  82. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/cans/schema.py +0 -0
  83. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/cans/unpack.py +0 -0
  84. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/cans/verify.py +0 -0
  85. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/cli.py +0 -0
  86. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/__init__.py +0 -0
  87. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/_eval_v0550.py +0 -0
  88. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/_eval_v0610.py +0 -0
  89. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/_webhook_cli.py +0 -0
  90. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/ab.py +0 -0
  91. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/active_sample.py +0 -0
  92. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/adapters.py +0 -0
  93. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/advise.py +0 -0
  94. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/agent.py +0 -0
  95. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/airgap.py +0 -0
  96. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/apple_adapter.py +0 -0
  97. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/attest.py +0 -0
  98. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/audit_log.py +0 -0
  99. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/autopilot.py +0 -0
  100. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/bench.py +0 -0
  101. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/bom.py +0 -0
  102. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/can.py +0 -0
  103. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/chat.py +0 -0
  104. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/compile_cmd.py +0 -0
  105. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/compile_tools.py +0 -0
  106. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/completions.py +0 -0
  107. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/cost.py +0 -0
  108. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/data_forge.py +0 -0
  109. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/data_mix.py +0 -0
  110. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/data_score.py +0 -0
  111. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/delinearize_llama4.py +0 -0
  112. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/deploy.py +0 -0
  113. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/diagnose.py +0 -0
  114. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/diff.py +0 -0
  115. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/distill_prompt.py +0 -0
  116. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/doctor.py +0 -0
  117. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/drift_alarm.py +0 -0
  118. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/edit.py +0 -0
  119. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/env.py +0 -0
  120. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/eval.py +0 -0
  121. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/expect.py +0 -0
  122. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/export.py +0 -0
  123. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/fetch.py +0 -0
  124. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/generate.py +0 -0
  125. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/history.py +0 -0
  126. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/infer.py +0 -0
  127. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/ingest.py +0 -0
  128. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/init.py +0 -0
  129. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/iterative_dpo.py +0 -0
  130. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/license_advisor.py +0 -0
  131. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/llama.py +0 -0
  132. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/local_rl.py +0 -0
  133. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/lock.py +0 -0
  134. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/loop.py +0 -0
  135. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/merge.py +0 -0
  136. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
  137. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/migrate.py +0 -0
  138. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/monitor.py +0 -0
  139. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/plan.py +0 -0
  140. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/plugins.py +0 -0
  141. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/probe.py +0 -0
  142. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/profile.py +0 -0
  143. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/prune_prompt.py +0 -0
  144. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/push.py +0 -0
  145. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/quantize.py +0 -0
  146. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/quickstart.py +0 -0
  147. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/recipes.py +0 -0
  148. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/registry.py +0 -0
  149. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/runs.py +0 -0
  150. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/serve.py +0 -0
  151. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/steer.py +0 -0
  152. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/sweep.py +0 -0
  153. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/tokenizer.py +0 -0
  154. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/train.py +0 -0
  155. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/tui.py +0 -0
  156. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/tunability.py +0 -0
  157. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/ui.py +0 -0
  158. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/commands/why.py +0 -0
  159. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/config/__init__.py +0 -0
  160. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/config/loader.py +0 -0
  161. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/config/schema.py +0 -0
  162. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/__init__.py +0 -0
  163. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
  164. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
  165. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
  166. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
  167. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
  168. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
  169. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
  170. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
  171. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
  172. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
  173. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
  174. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
  175. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/augment.py +0 -0
  176. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/chat_templates.py +0 -0
  177. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/collators.py +0 -0
  178. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/formats.py +0 -0
  179. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/loader.py +0 -0
  180. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/loss_mask.py +0 -0
  181. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/providers/__init__.py +0 -0
  182. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/providers/_utils.py +0 -0
  183. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/providers/anthropic.py +0 -0
  184. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/sft_format.py +0 -0
  185. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/templates/__init__.py +0 -0
  186. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/templates/code.py +0 -0
  187. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/templates/conversation.py +0 -0
  188. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/templates/preference.py +0 -0
  189. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/templates/qa.py +0 -0
  190. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/templates/reasoning.py +0 -0
  191. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/templates/tool_calling.py +0 -0
  192. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/templates/verifiable.py +0 -0
  193. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/traces/__init__.py +0 -0
  194. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/traces/pair_builder.py +0 -0
  195. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/traces/parsers.py +0 -0
  196. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/traces/quality.py +0 -0
  197. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/data/validator.py +0 -0
  198. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/eval/__init__.py +0 -0
  199. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/eval/arena.py +0 -0
  200. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
  201. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/eval/calibrate.py +0 -0
  202. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
  203. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/eval/custom.py +0 -0
  204. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/eval/forgetting.py +0 -0
  205. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/eval/gate.py +0 -0
  206. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/eval/human.py +0 -0
  207. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/eval/judge.py +0 -0
  208. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/eval/leaderboard.py +0 -0
  209. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/eval/quant_check.py +0 -0
  210. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/experiment/__init__.py +0 -0
  211. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/experiment/tracker.py +0 -0
  212. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/migrate/__init__.py +0 -0
  213. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/migrate/axolotl.py +0 -0
  214. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/migrate/common.py +0 -0
  215. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/migrate/llamafactory.py +0 -0
  216. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/migrate/unsloth.py +0 -0
  217. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/monitoring/__init__.py +0 -0
  218. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/monitoring/callback.py +0 -0
  219. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
  220. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/monitoring/display.py +0 -0
  221. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
  222. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/monitoring/hf_push.py +0 -0
  223. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/monitoring/plugin_callback.py +0 -0
  224. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/monitoring/trace_logger.py +0 -0
  225. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/plugins/__init__.py +0 -0
  226. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/py.typed +0 -0
  227. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/recipes/__init__.py +0 -0
  228. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/recipes/catalog.py +0 -0
  229. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/registry/__init__.py +0 -0
  230. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/registry/attach.py +0 -0
  231. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/registry/diff.py +0 -0
  232. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/registry/hashing.py +0 -0
  233. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/registry/store.py +0 -0
  234. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/__init__.py +0 -0
  235. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/audio.yaml +0 -0
  236. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/bco.yaml +0 -0
  237. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/chat.yaml +0 -0
  238. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/code.yaml +0 -0
  239. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/embedding.yaml +0 -0
  240. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
  241. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
  242. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
  243. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/ipo.yaml +0 -0
  244. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/kto.yaml +0 -0
  245. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/longcontext.yaml +0 -0
  246. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/manifest.json +0 -0
  247. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/medical.yaml +0 -0
  248. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/moe.yaml +0 -0
  249. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/orpo.yaml +0 -0
  250. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/pretrain.yaml +0 -0
  251. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/reasoning.yaml +0 -0
  252. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/rlhf.yaml +0 -0
  253. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/simpo.yaml +0 -0
  254. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/tool-calling.yaml +0 -0
  255. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/templates/vision.yaml +0 -0
  256. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/__init__.py +0 -0
  257. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/bco.py +0 -0
  258. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/classifier.py +0 -0
  259. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/distill.py +0 -0
  260. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/dpo.py +0 -0
  261. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/embedding.py +0 -0
  262. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/grpo.py +0 -0
  263. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/ipo.py +0 -0
  264. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/kto.py +0 -0
  265. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/mlx_dpo.py +0 -0
  266. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/mlx_grpo.py +0 -0
  267. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/mlx_routing.py +0 -0
  268. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/mlx_sft.py +0 -0
  269. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/orpo.py +0 -0
  270. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/ppo.py +0 -0
  271. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/preference.py +0 -0
  272. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/pretrain.py +0 -0
  273. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/prm.py +0 -0
  274. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/reward_model.py +0 -0
  275. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/rewards.py +0 -0
  276. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/sft.py +0 -0
  277. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/simpo.py +0 -0
  278. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/trainer/unlearn.py +0 -0
  279. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/tui_app.py +0 -0
  280. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/ui/__init__.py +0 -0
  281. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/ui/app.py +0 -0
  282. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/ui/plugins/__init__.py +0 -0
  283. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/ui/static/app.js +0 -0
  284. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/ui/static/index.html +0 -0
  285. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/ui/static/logo.png +0 -0
  286. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/ui/static/logo.svg +0 -0
  287. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/ui/static/style.css +0 -0
  288. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/__init__.py +0 -0
  289. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/_eval_text.py +0 -0
  290. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/ab_test.py +0 -0
  291. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/activation_offload.py +0 -0
  292. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/active_sampler.py +0 -0
  293. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/adapter_bisect.py +0 -0
  294. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/adapter_branch.py +0 -0
  295. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/adapter_diff.py +0 -0
  296. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/adapter_merge.py +0 -0
  297. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/adapter_pr.py +0 -0
  298. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/adapter_scan.py +0 -0
  299. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/adapter_sign.py +0 -0
  300. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/advanced_precision.py +0 -0
  301. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/advise.py +0 -0
  302. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/advise_history.py +0 -0
  303. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/agent_forge.py +0 -0
  304. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/agent_rollout.py +0 -0
  305. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/airgap_bundle.py +0 -0
  306. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/annex_xi.py +0 -0
  307. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/anthropic_messages.py +0 -0
  308. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/apple_adapter.py +0 -0
  309. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/attest.py +0 -0
  310. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/audit_log.py +0 -0
  311. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/auto_quant.py +0 -0
  312. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/backend_detect.py +0 -0
  313. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/batch_probe.py +0 -0
  314. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/behavior_battery.py +0 -0
  315. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/bitnet.py +0 -0
  316. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/blame.py +0 -0
  317. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/block_expansion.py +0 -0
  318. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/bom.py +0 -0
  319. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/brain_rot.py +0 -0
  320. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/brain_rot_lang.py +0 -0
  321. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/canary_discovery.py +0 -0
  322. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/canary_router.py +0 -0
  323. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/capability_suite.py +0 -0
  324. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/checklist_dsl.py +0 -0
  325. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
  326. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/citation_faithful.py +0 -0
  327. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/classifier.py +0 -0
  328. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/cmaes_merge.py +0 -0
  329. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/compile_tools.py +0 -0
  330. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/completions.py +0 -0
  331. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/constants.py +0 -0
  332. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/convergence.py +0 -0
  333. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/crash.py +0 -0
  334. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/cross_doc_attn.py +0 -0
  335. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/curriculum.py +0 -0
  336. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
  337. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/cut_ce.py +0 -0
  338. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/data_forge.py +0 -0
  339. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/data_mix.py +0 -0
  340. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/data_pipeline.py +0 -0
  341. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/data_score.py +0 -0
  342. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/deepspeed.py +0 -0
  343. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/delinearize_llama4.py +0 -0
  344. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/demo_bundles.py +0 -0
  345. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/deploy_autopilot.py +0 -0
  346. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/deploy_measure.py +0 -0
  347. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/__init__.py +0 -0
  348. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/badge.py +0 -0
  349. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/contamination.py +0 -0
  350. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
  351. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/format.py +0 -0
  352. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
  353. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/refusal.py +0 -0
  354. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/report.py +0 -0
  355. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/runner.py +0 -0
  356. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/distill.py +0 -0
  357. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/dpo_variants.py +0 -0
  358. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/drift_alarm.py +0 -0
  359. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/ebft_gdpo.py +0 -0
  360. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/echo_trap.py +0 -0
  361. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/edit_diff.py +0 -0
  362. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/edit_governor.py +0 -0
  363. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/encoding.py +0 -0
  364. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/energy.py +0 -0
  365. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/env_lock.py +0 -0
  366. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/errors.py +0 -0
  367. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/eval_design.py +0 -0
  368. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/eval_gate_hook.py +0 -0
  369. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
  370. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/expectations.py +0 -0
  371. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/fetch_examples.py +0 -0
  372. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/flash_attn.py +0 -0
  373. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/fp8.py +0 -0
  374. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/freeze.py +0 -0
  375. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/fsdp.py +0 -0
  376. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
  377. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/galore.py +0 -0
  378. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/gguf_quant.py +0 -0
  379. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/gpu.py +0 -0
  380. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/gpu_monitor.py +0 -0
  381. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/grace_codebook.py +0 -0
  382. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/graceful_save.py +0 -0
  383. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/grad_accum.py +0 -0
  384. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/gradient_ckpt.py +0 -0
  385. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/grpo_long_context.py +0 -0
  386. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/grpo_variants.py +0 -0
  387. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/hardware_fit.py +0 -0
  388. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/hf.py +0 -0
  389. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/hf_space.py +0 -0
  390. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/hubs.py +0 -0
  391. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/ingest_sources.py +0 -0
  392. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/integrations.py +0 -0
  393. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/interference.py +0 -0
  394. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/iterative_dpo.py +0 -0
  395. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/jinja_analyzer.py +0 -0
  396. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/kernel_picker.py +0 -0
  397. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/knowledge_edit.py +0 -0
  398. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/kv_cache.py +0 -0
  399. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/launcher.py +0 -0
  400. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/license_advisor.py +0 -0
  401. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/license_matrix.py +0 -0
  402. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/liger.py +0 -0
  403. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/llama_proxy.py +0 -0
  404. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/llama_server_timings.py +0 -0
  405. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/local_rl.py +0 -0
  406. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/loftq_init.py +0 -0
  407. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/log_level.py +0 -0
  408. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/long_context.py +0 -0
  409. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/longlora.py +0 -0
  410. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/loop_budget.py +0 -0
  411. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/loop_daemon.py +0 -0
  412. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/loop_iteration.py +0 -0
  413. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/loop_stages.py +0 -0
  414. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/loop_state.py +0 -0
  415. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/lr_finder.py +0 -0
  416. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/lr_groups.py +0 -0
  417. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/metrics.py +0 -0
  418. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/mii.py +0 -0
  419. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/minillm.py +0 -0
  420. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/mix_proxy.py +0 -0
  421. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/mixed_precision.py +0 -0
  422. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/mlx.py +0 -0
  423. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/moe.py +0 -0
  424. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/moe_quant.py +0 -0
  425. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/mole_routing.py +0 -0
  426. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/multipack.py +0 -0
  427. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/multipack_sampler.py +0 -0
  428. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/multipack_trainer.py +0 -0
  429. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/namespace_pin.py +0 -0
  430. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/neat_packing.py +0 -0
  431. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/ngram_spec.py +0 -0
  432. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/nlg_metrics.py +0 -0
  433. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/ollama.py +0 -0
  434. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/onboarding.py +0 -0
  435. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/optimizer_zoo.py +0 -0
  436. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/paths.py +0 -0
  437. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/peft_builder.py +0 -0
  438. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/peft_patches.py +0 -0
  439. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/peft_wiring.py +0 -0
  440. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/persona_hub.py +0 -0
  441. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/pipeline.py +0 -0
  442. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/preference_combine.py +0 -0
  443. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/prm.py +0 -0
  444. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/probe_pack.py +0 -0
  445. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/profiler.py +0 -0
  446. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/profiling.py +0 -0
  447. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/profiling_v0_43.py +0 -0
  448. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/prompt_compile.py +0 -0
  449. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/prompt_distill.py +0 -0
  450. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/prune_prompt.py +0 -0
  451. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/qat.py +0 -0
  452. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/qr_url.py +0 -0
  453. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/quality.py +0 -0
  454. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/quant_menu.py +0 -0
  455. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/ra_dit.py +0 -0
  456. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/reasoning_effort.py +0 -0
  457. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/reasoning_parser.py +0 -0
  458. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/recipe_dag.py +0 -0
  459. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/recipe_run.py +0 -0
  460. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/registry.py +0 -0
  461. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/relora.py +0 -0
  462. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/replay.py +0 -0
  463. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/repro_receipt.py +0 -0
  464. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/reward_hacking.py +0 -0
  465. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/ring_attention.py +0 -0
  466. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/rl_checkpoint.py +0 -0
  467. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/run_cost.py +0 -0
  468. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/sae_diff.py +0 -0
  469. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/save_formats.py +0 -0
  470. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/server_tools.py +0 -0
  471. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/sglang.py +0 -0
  472. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/shortcuts.py +0 -0
  473. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/signing.py +0 -0
  474. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/sleeper_probe.py +0 -0
  475. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/soup_lock.py +0 -0
  476. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/spec_pairing.py +0 -0
  477. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/spike_recovery.py +0 -0
  478. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/sse_train_stream.py +0 -0
  479. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/steering.py +0 -0
  480. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/strict_safetensors.py +0 -0
  481. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/structured_output.py +0 -0
  482. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/sweep_config.py +0 -0
  483. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/tail_latency.py +0 -0
  484. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/terraform_plan.py +0 -0
  485. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/tool_outputs.py +0 -0
  486. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/topology.py +0 -0
  487. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/tracing.py +0 -0
  488. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/trackers.py +0 -0
  489. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/train_event_buffer.py +0 -0
  490. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/trainer_plugins.py +0 -0
  491. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/trust_remote.py +0 -0
  492. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/tts.py +0 -0
  493. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/tunability.py +0 -0
  494. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/ui_env.py +0 -0
  495. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/uld.py +0 -0
  496. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/unlearning.py +0 -0
  497. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/unlearning_eval.py +0 -0
  498. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/unsloth.py +0 -0
  499. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/v028_features.py +0 -0
  500. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/vector_bank.py +0 -0
  501. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/vllm.py +0 -0
  502. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/vscode_setup.py +0 -0
  503. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/warmup.py +0 -0
  504. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/webhooks.py +0 -0
  505. {soup_cli-0.71.5 → soup_cli-0.71.6}/src/soup_cli/utils/why.py +0 -0
  506. {soup_cli-0.71.5 → soup_cli-0.71.6}/templates/chat.yaml +0 -0
  507. {soup_cli-0.71.5 → soup_cli-0.71.6}/templates/code.yaml +0 -0
  508. {soup_cli-0.71.5 → soup_cli-0.71.6}/templates/medical.yaml +0 -0
  509. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/__init__.py +0 -0
  510. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/conftest.py +0 -0
  511. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/qa/v053_qa.md +0 -0
  512. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_adapters.py +0 -0
  513. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_advanced_peft.py +0 -0
  514. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_assistant_mask.py +0 -0
  515. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_audio.py +0 -0
  516. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_auto_tuning.py +0 -0
  517. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_autopilot.py +0 -0
  518. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_awq_gptq_export.py +0 -0
  519. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_batch_probe.py +0 -0
  520. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_bco.py +0 -0
  521. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_bench.py +0 -0
  522. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_brain_rot_multilingual.py +0 -0
  523. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_bugfixes.py +0 -0
  524. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_callback.py +0 -0
  525. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_cans.py +0 -0
  526. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_chat.py +0 -0
  527. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_chat_template.py +0 -0
  528. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_cli.py +0 -0
  529. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_cli_subprocess.py +0 -0
  530. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_config.py +0 -0
  531. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_cost.py +0 -0
  532. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_crash_reporter.py +0 -0
  533. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_curriculum.py +0 -0
  534. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_data.py +0 -0
  535. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_data_augment.py +0 -0
  536. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_data_sample.py +0 -0
  537. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_data_split.py +0 -0
  538. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_data_tools.py +0 -0
  539. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_dataset_hub.py +0 -0
  540. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_dataset_registry.py +0 -0
  541. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_deepspeed.py +0 -0
  542. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_deploy_ollama.py +0 -0
  543. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_diff.py +0 -0
  544. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_display.py +0 -0
  545. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_doctor.py +0 -0
  546. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_dpo_example.py +0 -0
  547. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_dpo_variants.py +0 -0
  548. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_embedding.py +0 -0
  549. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_errors.py +0 -0
  550. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_eval.py +0 -0
  551. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_eval_gate.py +0 -0
  552. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_eval_platform.py +0 -0
  553. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_export.py +0 -0
  554. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_formats.py +0 -0
  555. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_fp8_recipe.py +0 -0
  556. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_freeze_training.py +0 -0
  557. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_generate.py +0 -0
  558. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_gpu.py +0 -0
  559. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_grpo.py +0 -0
  560. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_hf_integration.py +0 -0
  561. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_infer.py +0 -0
  562. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_inference_advanced.py +0 -0
  563. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_init.py +0 -0
  564. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_ipo.py +0 -0
  565. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_jinja_analyzer.py +0 -0
  566. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_kto.py +0 -0
  567. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_loader.py +0 -0
  568. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_log_level.py +0 -0
  569. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_loss_watchdog.py +0 -0
  570. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_merge.py +0 -0
  571. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_migrate.py +0 -0
  572. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_mlx_backend.py +0 -0
  573. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_moe.py +0 -0
  574. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_multi_adapter.py +0 -0
  575. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_multi_gpu.py +0 -0
  576. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_multipack_config.py +0 -0
  577. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_multipack_invariants.py +0 -0
  578. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_multipack_sampler.py +0 -0
  579. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_neat_packing.py +0 -0
  580. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_neftune_rslora.py +0 -0
  581. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_onnx_tensorrt_export.py +0 -0
  582. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_orpo.py +0 -0
  583. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_packing.py +0 -0
  584. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_part_a_wave1.py +0 -0
  585. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_part_a_wave2.py +0 -0
  586. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_part_b.py +0 -0
  587. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_part_c.py +0 -0
  588. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_part_d.py +0 -0
  589. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_part_e.py +0 -0
  590. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_part_f_hardening.py +0 -0
  591. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_peft_methods.py +0 -0
  592. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_peft_patches.py +0 -0
  593. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_performance.py +0 -0
  594. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_pissa_init.py +0 -0
  595. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_ppo.py +0 -0
  596. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_preference_dispatcher.py +0 -0
  597. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_preference_multi.py +0 -0
  598. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_preference_multi_runtime.py +0 -0
  599. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_pretrain.py +0 -0
  600. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_profile.py +0 -0
  601. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_profiling.py +0 -0
  602. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_progress.py +0 -0
  603. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_push.py +0 -0
  604. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_qat.py +0 -0
  605. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_quality_filter.py +0 -0
  606. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_quant_check.py +0 -0
  607. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_quant_menu.py +0 -0
  608. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_quickstart.py +0 -0
  609. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_rank_pattern.py +0 -0
  610. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_recipes.py +0 -0
  611. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_recipes_v031.py +0 -0
  612. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_refusal_multilingual.py +0 -0
  613. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_registry.py +0 -0
  614. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_relora.py +0 -0
  615. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_replay.py +0 -0
  616. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_resume.py +0 -0
  617. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_rlvr.py +0 -0
  618. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_run_cost.py +0 -0
  619. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_runs.py +0 -0
  620. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_serve.py +0 -0
  621. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_server_generate.py +0 -0
  622. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_sglang_serve.py +0 -0
  623. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_simpo.py +0 -0
  624. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_smoke_train.py +0 -0
  625. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_speculative_decoding.py +0 -0
  626. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_sweep.py +0 -0
  627. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_synth_data_pro.py +0 -0
  628. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_templates_yaml.py +0 -0
  629. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_tensorboard.py +0 -0
  630. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_tool_calling.py +0 -0
  631. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_trace_to_pref.py +0 -0
  632. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_tracker.py +0 -0
  633. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_trainer_coverage_v035.py +0 -0
  634. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_trainer_init.py +0 -0
  635. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_training_intelligence.py +0 -0
  636. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_training_speed.py +0 -0
  637. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_trust_remote_code.py +0 -0
  638. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_tui.py +0 -0
  639. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_ui.py +0 -0
  640. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_ui_chat.py +0 -0
  641. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_ui_config_builder.py +0 -0
  642. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_ui_live_monitor.py +0 -0
  643. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_ui_metrics.py +0 -0
  644. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_unsloth.py +0 -0
  645. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0401_part_c.py +0 -0
  646. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0401_part_d.py +0 -0
  647. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0401_part_e.py +0 -0
  648. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0402_part_a.py +0 -0
  649. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0402_part_b.py +0 -0
  650. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0403_part_a.py +0 -0
  651. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0403_part_b.py +0 -0
  652. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0403_part_c.py +0 -0
  653. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0404_part_a.py +0 -0
  654. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0404_part_b.py +0 -0
  655. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0405_part_a.py +0 -0
  656. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0406_part_a.py +0 -0
  657. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0410_part_a.py +0 -0
  658. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0410_part_b.py +0 -0
  659. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0410_part_c.py +0 -0
  660. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0420.py +0 -0
  661. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0430_part_a.py +0 -0
  662. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0430_part_b.py +0 -0
  663. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0430_part_c.py +0 -0
  664. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0430_part_d.py +0 -0
  665. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0440_part_a.py +0 -0
  666. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0440_part_b.py +0 -0
  667. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0440_part_c.py +0 -0
  668. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0440_part_d.py +0 -0
  669. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0440_review_followups.py +0 -0
  670. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0450.py +0 -0
  671. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0460_part_a.py +0 -0
  672. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0460_part_b.py +0 -0
  673. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0470_part_a.py +0 -0
  674. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0470_part_b.py +0 -0
  675. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0480_part_a.py +0 -0
  676. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0480_part_b.py +0 -0
  677. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0490.py +0 -0
  678. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0500_part_a.py +0 -0
  679. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0500_part_b.py +0 -0
  680. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0500_part_c.py +0 -0
  681. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0500_part_d.py +0 -0
  682. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0500_part_e.py +0 -0
  683. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0510.py +0 -0
  684. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0520.py +0 -0
  685. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0530.py +0 -0
  686. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v05310.py +0 -0
  687. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v05311.py +0 -0
  688. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0531_109.py +0 -0
  689. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0531_139.py +0 -0
  690. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0531_142.py +0 -0
  691. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0531_82.py +0 -0
  692. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0532.py +0 -0
  693. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0533.py +0 -0
  694. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0534.py +0 -0
  695. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0535.py +0 -0
  696. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0536.py +0 -0
  697. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0537.py +0 -0
  698. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0538.py +0 -0
  699. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0539.py +0 -0
  700. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0540.py +0 -0
  701. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0550.py +0 -0
  702. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0550_followups.py +0 -0
  703. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0560.py +0 -0
  704. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0570_part_a.py +0 -0
  705. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0570_part_b.py +0 -0
  706. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0570_part_c.py +0 -0
  707. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0570_part_d.py +0 -0
  708. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0580.py +0 -0
  709. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0590.py +0 -0
  710. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0600_part_a.py +0 -0
  711. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0600_part_b.py +0 -0
  712. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0600_part_c.py +0 -0
  713. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0600_part_d.py +0 -0
  714. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0600_part_e.py +0 -0
  715. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0600_part_f.py +0 -0
  716. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0610_part_a.py +0 -0
  717. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0610_part_b.py +0 -0
  718. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0610_part_c.py +0 -0
  719. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0610_part_d.py +0 -0
  720. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0610_part_e.py +0 -0
  721. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0620_followups.py +0 -0
  722. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0620_part_a.py +0 -0
  723. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0620_part_b.py +0 -0
  724. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0620_part_c.py +0 -0
  725. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0620_part_d.py +0 -0
  726. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0620_part_e.py +0 -0
  727. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0630_followups.py +0 -0
  728. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0630_part_a.py +0 -0
  729. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0630_part_b.py +0 -0
  730. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0630_part_c.py +0 -0
  731. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0630_part_d.py +0 -0
  732. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0630_part_e.py +0 -0
  733. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0631_206.py +0 -0
  734. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0640_followups.py +0 -0
  735. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0640_part_a.py +0 -0
  736. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0640_part_b.py +0 -0
  737. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0640_part_c.py +0 -0
  738. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0640_part_d.py +0 -0
  739. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0640_part_e.py +0 -0
  740. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0640_part_f.py +0 -0
  741. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0650_followups.py +0 -0
  742. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0650_part_a.py +0 -0
  743. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0650_part_b.py +0 -0
  744. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0650_part_c.py +0 -0
  745. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0650_part_d.py +0 -0
  746. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0650_part_e.py +0 -0
  747. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0660_cli.py +0 -0
  748. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0660_followups.py +0 -0
  749. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0660_part_a.py +0 -0
  750. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0660_part_b.py +0 -0
  751. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0660_part_c.py +0 -0
  752. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0660_part_d.py +0 -0
  753. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0660_part_e.py +0 -0
  754. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0670_followups.py +0 -0
  755. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0670_part_a.py +0 -0
  756. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0670_part_b.py +0 -0
  757. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0670_part_c.py +0 -0
  758. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0670_part_d.py +0 -0
  759. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0670_part_e.py +0 -0
  760. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0670_part_f.py +0 -0
  761. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0680_followups.py +0 -0
  762. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0680_part_a.py +0 -0
  763. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0680_part_b.py +0 -0
  764. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0680_part_c.py +0 -0
  765. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0680_part_d.py +0 -0
  766. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0680_part_e.py +0 -0
  767. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0690_part_b.py +0 -0
  768. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0690_part_d.py +0 -0
  769. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0690_part_e.py +0 -0
  770. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0700_part_a.py +0 -0
  771. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0700_part_b.py +0 -0
  772. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0700_part_c.py +0 -0
  773. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0700_part_d.py +0 -0
  774. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0700_part_e.py +0 -0
  775. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0700_part_f.py +0 -0
  776. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0712.py +0 -0
  777. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0713.py +0 -0
  778. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0714.py +0 -0
  779. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_v0715.py +0 -0
  780. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_validator.py +0 -0
  781. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_vision.py +0 -0
  782. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_vllm_serve.py +0 -0
  783. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_why.py +0 -0
  784. {soup_cli-0.71.5 → soup_cli-0.71.6}/tests/test_windows_encoding.py +0 -0
@@ -0,0 +1,8 @@
1
+ # .mailmap — consolidate contributor identities for `git shortlog` and the
2
+ # GitHub contributors graph. See: https://git-scm.com/docs/gitmailmap
3
+ #
4
+ # Salil Mhatre committed under four name/email combinations
5
+ # (two emails, three display names). Map them all to one canonical identity.
6
+ Salil Mhatre <32305505+Deadpool2000@users.noreply.github.com> <d2kyt@protonmail.com>
7
+ Salil Mhatre <32305505+Deadpool2000@users.noreply.github.com> Salil <32305505+Deadpool2000@users.noreply.github.com>
8
+ Salil Mhatre <32305505+Deadpool2000@users.noreply.github.com> Salil M <32305505+Deadpool2000@users.noreply.github.com>
@@ -12,6 +12,53 @@ reproducing 70+ versions of notes.
12
12
 
13
13
  ## [Unreleased]
14
14
 
15
+ ## [0.71.6] - 2026-06-02
16
+
17
+ ### Added
18
+ - **`soup build` live runner** — the dbt-for-SFT DAG (`soup build <manifest>`) now
19
+ *materialises* datasets instead of only dry-running the plan. Five built-in
20
+ transforms ship live (`identity`, `drop_empty`, `lowercase`, `strip`,
21
+ `dedup_exact`); `table` rebuilds from scratch, `view` re-derives on every run,
22
+ and `incremental` re-transforms only the rows whose content hash changed
23
+ (tracked in a SQLite state store, keyed by row hash **and** the model's
24
+ transform+config fingerprint so a transform change re-runs everything). Custom
25
+ transforms are passed per-run via the Python API's `transforms=` map. Outputs
26
+ are written atomically; the `--output-dir` is symlink-checked before any
27
+ directory is created.
28
+ - **`soup data gen-magpie` live generator** — the Magpie synthetic generator
29
+ (Xu et al. 2024) now actually generates. It feeds an aligned model its
30
+ chat-template prefix (chatml / llama3 / gemma / mistral families auto-detected)
31
+ and harvests the self-generated user instruction + assistant response via raw
32
+ completion. Live providers: `ollama` (`/api/generate` raw) and `vllm`
33
+ (`/v1/completions`) — both SSRF-hardened (loopback-only HTTP); `anthropic` is
34
+ rejected (no raw-completion endpoint). Optional `--quality-filter` drops
35
+ low-quality rows via the v0.47 toxicity/educational scorers; exact-duplicate
36
+ instructions are de-duplicated.
37
+ - **`soup eval irt-subset --model {1pl,2pl,3pl}`** — the IRT eval-cost optimiser
38
+ gained 2PL (per-item discrimination) and 3PL (+guessing floor) joint
39
+ coordinate-ascent MLE fits alongside the existing 1PL Rasch. `1pl` keeps the
40
+ closed-form path for back-compat; `2pl`/`3pl` route through the new `fit_irt`.
41
+ - **Tokenizer-aware memorization probe** — `score_memorization(..., tokenizer=...)`
42
+ and `split_prefix(..., tokenizer=...)` (used by `soup diagnose`) now split the
43
+ prefix/suffix on real token-id boundaries and measure echo-overlap over
44
+ sub-word tokens when a tokenizer (HF id / path / duck-typed object) is supplied,
45
+ catching BPE-level memorization that whitespace tokenisation misses. Default
46
+ (no tokenizer) keeps the whitespace behaviour.
47
+
48
+ ### Fixed
49
+ - **`soup data augment --provider ollama|vllm` no longer crashes** — the command
50
+ imported a non-existent `OllamaProvider` symbol and raised `ImportError` on
51
+ every non-OpenAI provider. It now routes through the shared, SSRF-hardened
52
+ provider factory; `--model` / `--base-url` are honoured, the output path is
53
+ containment- and symlink-checked, and the write is atomic.
54
+
55
+ ### Security
56
+ - **Ollama / vLLM provider URLs reject `0.0.0.0`** — `validate_ollama_url` /
57
+ `validate_vllm_url` dropped the bind-any wildcard from their loopback allow-set
58
+ (now `localhost` / `127.0.0.1` / `::1` only), matching the newer
59
+ `validate_hub_endpoint` / `validate_webhook_url` SSRF validators. Reachable now
60
+ that Magpie threads a user-supplied `--base-url` through these providers.
61
+
15
62
  ## [0.71.5] - 2026-06-02
16
63
 
17
64
  ### Added
@@ -120,7 +120,7 @@ src/soup_cli/
120
120
  templates/ - 17 built-in soup.yaml templates (YAML + manifest.json) with load_template loader (v0.39.0, +bco v0.40.0)
121
121
  ui/ - Web UI (FastAPI + HTML/JS SPA)
122
122
 
123
- tests/ - Test suite (275 files, 12581 tests)
123
+ tests/ - Test suite (276 files, 12703 tests)
124
124
  examples/ - Real-world config examples and datasets
125
125
  ```
126
126
 
@@ -150,7 +150,11 @@ pytest tests/test_data.py::test_detect_alpaca_format -v
150
150
  pytest tests/ --cov=soup_cli --cov-report=html
151
151
  ```
152
152
 
153
- ### Test Files (86 files)
153
+ ### Test Files (275 files)
154
+
155
+ > A representative sample of the suite below. The full table lives in
156
+ > [`.claude/CLAUDE.md`](.claude/CLAUDE.md); run `pytest tests/ -v` for the complete list.
157
+
154
158
 
155
159
  | File | Covers |
156
160
  |------|--------|
@@ -441,6 +445,17 @@ The project follows semantic versioning: `MAJOR.MINOR.PATCH`
441
445
  5. Tag: `git tag v0.X.0 && git push --tags`
442
446
  6. GitHub Actions auto-publishes to PyPI on the `v*` tag (Trusted Publisher / OIDC)
443
447
 
448
+ ## Recognition
449
+
450
+ We credit every contributor — recognition is free and you earned it.
451
+
452
+ - **[CONTRIBUTORS.md](CONTRIBUTORS.md):** every merged (or in-tree-adopted) PR adds you here, with your work and PR number.
453
+ - **CHANGELOG.md:** from the release that ships your change, the entry is tagged `(#NNN by @you)`.
454
+ - **Commit trailers:** PRs land with a `Co-Authored-By:` line for you, so the GitHub
455
+ contributors graph reflects your work even after a squash merge.
456
+
457
+ If you contributed and aren't credited somewhere, that's a bug — open a PR or an issue and we'll fix it.
458
+
444
459
  ## Community
445
460
 
446
461
  - **Issues:** Report bugs and request features on [GitHub Issues](https://github.com/MakazhanAlpamys/Soup/issues)
@@ -0,0 +1,43 @@
1
+ # Contributors
2
+
3
+ Soup is built by its community. Thank you to everyone who has contributed code,
4
+ tests, docs, and ideas. ❤️
5
+
6
+ This list is maintained by hand alongside the GitHub
7
+ [contributors graph](https://github.com/MakazhanAlpamys/Soup/graphs/contributors).
8
+ Merged a PR and don't see yourself here? Open a PR adding your line — that counts too.
9
+
10
+ ## Maintainer
11
+
12
+ - **Alpamys** ([@MakazhanAlpamys](https://github.com/MakazhanAlpamys)) — creator & lead maintainer
13
+
14
+ ## Contributors
15
+
16
+ Listed by first contribution. PR numbers link the work.
17
+
18
+ - **Salil Mhatre** ([@Deadpool2000](https://github.com/Deadpool2000))
19
+ - `soup version --json` for machine-readable CI output ([#6](https://github.com/MakazhanAlpamys/Soup/pull/6))
20
+ - RAM + disk-space checks in `soup doctor` ([#7](https://github.com/MakazhanAlpamys/Soup/pull/7))
21
+ - `soup runs clean` for smart checkpoint space management ([#9](https://github.com/MakazhanAlpamys/Soup/pull/9))
22
+ - Official Docker support for easier onboarding ([#20](https://github.com/MakazhanAlpamys/Soup/pull/20))
23
+ - `soup bench` — model speed + VRAM measurement ([#25](https://github.com/MakazhanAlpamys/Soup/pull/25))
24
+ - `--prompts-file` option for `soup bench` ([#30](https://github.com/MakazhanAlpamys/Soup/pull/30))
25
+ - Happy-path + CPU-warning tests for `soup bench` ([#31](https://github.com/MakazhanAlpamys/Soup/pull/31))
26
+ - `soup cost` — cloud GPU training cost estimation ([#42](https://github.com/MakazhanAlpamys/Soup/pull/42))
27
+ - `--nccl` flag for `soup doctor` multi-GPU bandwidth checks ([#178](https://github.com/MakazhanAlpamys/Soup/pull/178))
28
+ - **Chinmaya Sahu** ([@csking101](https://github.com/csking101))
29
+ - DPO example config, sample data, and tests ([#48](https://github.com/MakazhanAlpamys/Soup/pull/48))
30
+ - FP8 `rowwise` + `rowwise_with_gw_hp` scaling recipes ([#62](https://github.com/MakazhanAlpamys/Soup/pull/62))
31
+ - **Yixuan Xu** ([@mzl2233](https://github.com/mzl2233))
32
+ - Guard diagnose-gate on distributed worker ranks ([#169](https://github.com/MakazhanAlpamys/Soup/pull/169))
33
+ - **dreamer0129** ([@dreamer0129](https://github.com/dreamer0129))
34
+ - Rich-markup escape fix in legacy `soup adapters` commands ([#175](https://github.com/MakazhanAlpamys/Soup/pull/175), adopted in-tree as [#174](https://github.com/MakazhanAlpamys/Soup/issues/174))
35
+ - **Vivaan Dhawan** ([@VIVAAN-DHAWAN](https://github.com/VIVAAN-DHAWAN))
36
+ - Reject pickle/zip streams renamed to `.safetensors` via magic-byte check ([#198](https://github.com/MakazhanAlpamys/Soup/pull/198))
37
+ - **Shivam** ([@shivam2931120](https://github.com/shivam2931120))
38
+ - Tokenizer-aware repetition scoring for the echo-trap detector ([#242](https://github.com/MakazhanAlpamys/Soup/pull/242))
39
+
40
+ ---
41
+
42
+ Want to join this list? See [CONTRIBUTING.md](CONTRIBUTING.md) — good first issues are
43
+ labelled in the [issue tracker](https://github.com/MakazhanAlpamys/Soup/labels/good%20first%20issue).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: soup-cli
3
- Version: 0.71.5
3
+ Version: 0.71.6
4
4
  Summary: Fine-tune 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
@@ -183,22 +183,20 @@ infrastructure instead of improving models. Soup fixes that.
183
183
 
184
184
  ## What's New
185
185
 
186
- **v0.71.5Ingest, data & prompt polish.** Sharper production-loop ergonomics:
187
-
188
- - **Alternative model hubs for data** `soup data push --hub modelscope|modelers` uploads a
189
- local JSONL to ModelScope / Modelers, and `soup data forge --hub --teacher owner/name`
190
- pre-fetches the teacher from that hub.
191
- - **Tokenizer-aware prompt pruning** `soup prune-prompt --tokenizer <id-or-path>` finds the
192
- shared *token* prefix and decodes only the remainder, so BPE multi-byte sequences never get
193
- truncated mid-token the way char-slicing can.
194
- - **Webhooks everywhere** `--slack-url` / `--discord-url` now work on `soup ingest`,
195
- `soup prune-prompt`, `soup ab`, and `soup data active-sample` (same SSRF-hardened validator as
196
- `soup drift-alarm`). The A/B harness only pings when the sequential test actually decides.
197
- - **Curriculum by difficulty percentile** dynamic curriculum can bucket by `loss` /
198
- `perplexity` percentile instead of length round-robin.
199
- - **Smarter pre-flight `advise`** — `soup advise` now nudges its confidence using your prior
200
- verdicts for the same project, and `soup runs replay` can plot a benchmark-score curve, not
201
- just the loss curve.
186
+ **v0.71.6Synth data & build pipeline go live.** Three deferred stubs are now real:
187
+
188
+ - **`soup build` materialises** the dbt-for-SFT DAG no longer just dry-runs. `soup build
189
+ manifest.yaml --output-dir out/` runs the transforms (`drop_empty` / `lowercase` / `strip` /
190
+ `dedup_exact` / `identity` built in), rebuilds `table` / `view` models from scratch, and
191
+ re-transforms only the changed rows for `incremental` models (SQLite-tracked).
192
+ - **`soup data gen-magpie` generates** feed an aligned model its chat-template prefix and
193
+ harvest the self-generated instruction + response. Live for `--provider ollama` and `vllm`
194
+ (loopback-only), with an optional `--quality-filter`.
195
+ - **2PL / 3PL eval-cost models** `soup eval irt-subset --model 2pl|3pl` adds per-item
196
+ discrimination (and a 3PL guessing floor) on top of the existing 1PL Rasch fit.
197
+ - **Bug fix:** `soup data augment --provider ollama|vllm` no longer crashes with an `ImportError`
198
+ it now routes through the shared, SSRF-hardened provider factory and honours `--model` /
199
+ `--base-url`.
202
200
 
203
201
  Full history: [CHANGELOG.md](CHANGELOG.md) &middot; [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
204
202
 
@@ -49,22 +49,20 @@ infrastructure instead of improving models. Soup fixes that.
49
49
 
50
50
  ## What's New
51
51
 
52
- **v0.71.5Ingest, data & prompt polish.** Sharper production-loop ergonomics:
53
-
54
- - **Alternative model hubs for data** `soup data push --hub modelscope|modelers` uploads a
55
- local JSONL to ModelScope / Modelers, and `soup data forge --hub --teacher owner/name`
56
- pre-fetches the teacher from that hub.
57
- - **Tokenizer-aware prompt pruning** `soup prune-prompt --tokenizer <id-or-path>` finds the
58
- shared *token* prefix and decodes only the remainder, so BPE multi-byte sequences never get
59
- truncated mid-token the way char-slicing can.
60
- - **Webhooks everywhere** `--slack-url` / `--discord-url` now work on `soup ingest`,
61
- `soup prune-prompt`, `soup ab`, and `soup data active-sample` (same SSRF-hardened validator as
62
- `soup drift-alarm`). The A/B harness only pings when the sequential test actually decides.
63
- - **Curriculum by difficulty percentile** dynamic curriculum can bucket by `loss` /
64
- `perplexity` percentile instead of length round-robin.
65
- - **Smarter pre-flight `advise`** — `soup advise` now nudges its confidence using your prior
66
- verdicts for the same project, and `soup runs replay` can plot a benchmark-score curve, not
67
- just the loss curve.
52
+ **v0.71.6Synth data & build pipeline go live.** Three deferred stubs are now real:
53
+
54
+ - **`soup build` materialises** the dbt-for-SFT DAG no longer just dry-runs. `soup build
55
+ manifest.yaml --output-dir out/` runs the transforms (`drop_empty` / `lowercase` / `strip` /
56
+ `dedup_exact` / `identity` built in), rebuilds `table` / `view` models from scratch, and
57
+ re-transforms only the changed rows for `incremental` models (SQLite-tracked).
58
+ - **`soup data gen-magpie` generates** feed an aligned model its chat-template prefix and
59
+ harvest the self-generated instruction + response. Live for `--provider ollama` and `vllm`
60
+ (loopback-only), with an optional `--quality-filter`.
61
+ - **2PL / 3PL eval-cost models** `soup eval irt-subset --model 2pl|3pl` adds per-item
62
+ discrimination (and a 3PL guessing floor) on top of the existing 1PL Rasch fit.
63
+ - **Bug fix:** `soup data augment --provider ollama|vllm` no longer crashes with an `ImportError`
64
+ it now routes through the shared, SSRF-hardened provider factory and honours `--model` /
65
+ `--base-url`.
68
66
 
69
67
  Full history: [CHANGELOG.md](CHANGELOG.md) &middot; [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
70
68
 
@@ -72,7 +72,8 @@ soup data generate ... --provider anthropic Use Claude API
72
72
  soup data generate ... --provider vllm Use local vLLM server
73
73
  soup data generate ... --template code Domain templates (code/conversation/qa/preference/reasoning)
74
74
  soup data generate ... --quality-pipeline Auto validate + filter + dedup
75
- soup data augment <path> --strategy rephrase|translate|style LLM-driven augmentationsoup data from-traces --logs l.jsonl --format langchain --signal thumbs_up --output p.jsonl Preference pairs from traces
75
+ soup data augment <path> --strategy rephrase|translate|style [--provider ollama|vllm --model <m> --base-url <url>] LLM-driven augmentation
76
+ soup data from-traces --logs l.jsonl --format langchain --signal thumbs_up --output p.jsonl Preference pairs from traces
76
77
  soup data from-traces ... --judge --min-confidence 0.7 LLM-judge confidence filter
77
78
  soup data review prefs.jsonl --sample 10 Preview preference pairssoup data filter <path> --coherence 0.3 Quality filter (perplexity/coherence)
78
79
  soup data sample <path> --n 1000 Random sample subset
@@ -210,9 +211,9 @@ soup local-rl status --db <path> Print interactions / thumbs-up / t
210
211
  soup local-rl record --db <path> --prompt <q> --response <r> --thumb up|down Append thumbs record
211
212
  soup local-rl harvest --db <path> -o <pairs.jsonl> Harvest DPO pairs from thumbs into JSONL
212
213
  soup local-rl train --db <path> --backend ollama|mlx --model <id> Nightly DPO/KTO/ORPO train (v0.68.1)
213
- soup build <manifest.yaml> [--dry-run] dbt-for-SFT DAG: validate + plan dataset transforms (v0.69.0)
214
+ soup build <manifest.yaml> [--dry-run] [--output-dir <dir>] dbt-for-SFT DAG: validate + plan + live materialise (v0.69.0; live v0.71.6)
214
215
  soup expect <data.jsonl> <suite.yaml> Expectations suite: PII / token-length / refusal / judge (v0.69.0)
215
- soup data gen-magpie --base <m> --provider ollama|anthropic|vllm --target N [--plan-only] Magpie synthetic generator (v0.69.0)
216
+ soup data gen-magpie --base <m> --provider ollama|vllm --target N --output <jsonl> [--base-url <url>] [--quality-filter] Magpie synthetic generator — live (v0.69.0; live v0.71.6)
216
217
  soup data persona-mix --prompts <jsonl> --n N --output <jsonl> Persona-Hub diversity sampler (v0.69.0)
217
218
  soup data brain-rot <data.jsonl> [--strict] Brain-rot detector — arXiv 2510.13928 (v0.69.0)
218
219
  soup iterative-dpo --base-model <m> --reward-model <rm> --prompts <p.jsonl> --output-dir <out> --rounds N --pairs-per-round N [--plan-only] Iterative DPO loop driver (v0.70.0; live runner v0.70.1)
@@ -41,8 +41,8 @@ models:
41
41
  - {name: filtered, kind: incremental, refs: [raw], transform: filter_low_quality}
42
42
  - {name: tokenized, kind: incremental, refs: [filtered], transform: tokenize}
43
43
  EOF
44
- soup build build.yaml --dry-run # validate topology + plan
45
- # soup build build.yaml # live materialise (v0.69.1)
44
+ soup build build.yaml --dry-run # validate topology + plan
45
+ soup build build.yaml --output-dir built/ # live materialise (v0.71.6)
46
46
 
47
47
  # Expectations suite — Great Expectations for chat data
48
48
  cat > suite.yaml << 'EOF'
@@ -53,9 +53,9 @@ expectations:
53
53
  EOF
54
54
  soup expect data.jsonl suite.yaml # exit 3 on suite failure
55
55
 
56
- # Magpie synthetic data — chat-template-prefix harvest (plan, runner v0.69.1)
56
+ # Magpie synthetic data — chat-template-prefix harvest (live, v0.71.6)
57
57
  soup data gen-magpie --base meta-llama/Llama-3.1-8B-Instruct \
58
- --provider ollama --target 1000 --plan-only
58
+ --provider ollama --target 1000 --output magpie.jsonl --quality-filter
59
59
 
60
60
  # Persona-Hub diversity — prompt × persona × style matrix sampling
61
61
  soup data persona-mix --prompts prompts.jsonl --n 500 --output mixed.jsonl
@@ -64,7 +64,7 @@ soup data persona-mix --prompts prompts.jsonl --n 500 --output mixed.jsonl
64
64
  soup data brain-rot data.jsonl --strict --max-major-fraction 0.10
65
65
  ```
66
66
 
67
- Every command applies the project-wide TOCTOU policy (`os.lstat + S_ISLNK` symlink rejection before any open) and cwd containment via the shared `paths.enforce_under_cwd_and_no_symlink` helper. Live runners for `soup build` and `soup data gen-magpie` land in v0.69.1; the other three are LIVE today.
67
+ Every command applies the project-wide TOCTOU policy (`os.lstat + S_ISLNK` symlink rejection before any open) and cwd containment via the shared `paths.enforce_under_cwd_and_no_symlink` helper. All five are LIVE: `soup build` materialises with five built-in transforms (`identity` / `drop_empty` / `lowercase` / `strip` / `dedup_exact`) and SQLite-tracked incremental re-transform (v0.71.6); `soup data gen-magpie` harvests via raw completion against `--provider ollama|vllm` (loopback-only; `anthropic` rejected no raw-completion endpoint, v0.71.6).
68
68
 
69
69
 
70
70
  ## Production Trace Ecosystem (`soup ingest`)
@@ -206,9 +206,13 @@ soup data augment ./data/train.jsonl --strategy translate --lang es,fr,de \
206
206
  # Style transfer (formal / casual / technical / etc.)
207
207
  soup data augment ./data/train.jsonl --strategy style --styles formal,casual \
208
208
  --output ./data/train_styled.jsonl
209
+
210
+ # Local provider (Ollama / vLLM) — loopback-only, pick the model + base URL
211
+ soup data augment ./data/train.jsonl --strategy rephrase --count 2 \
212
+ --provider ollama --model qwen2.5:0.5b --output ./data/train_local.jsonl
209
213
  ```
210
214
 
211
- Works with any provider supported by `soup data generate` (OpenAI, Ollama, Anthropic, vLLM, local server). `--count` is capped at 10; `--lang` and `--styles` each capped at 10 entries × 32 chars.
215
+ Works with any provider supported by `soup data generate` (OpenAI, Ollama, vLLM, local server). `--model` and `--base-url` select a specific local model/endpoint; the Ollama/vLLM paths are loopback-only (SSRF-hardened). `--count` is capped at 10; `--lang` and `--styles` each capped at 10 entries × 32 chars.
212
216
 
213
217
 
214
218
  ## Trace-to-Preference
@@ -503,8 +503,11 @@ soup eval checklist tests.yaml --evidence responses.json
503
503
  ```bash
504
504
  # Pick top-info 30% of items (5-10x eval-bill cut without losing power)
505
505
  soup eval irt-subset per_item_correctness.jsonl --size small --output plan.json
506
+
507
+ # Richer item models: 2PL learns per-item discrimination, 3PL adds a guessing floor
508
+ soup eval irt-subset per_item_correctness.jsonl --size small --model 2pl
506
509
  ```
507
510
 
508
- Closed-form 1PL Rasch fit (`β̂_i = -log(p̂_i / (1 - p̂_i))`); ranks by `p̂ · (1-p̂)` info (maximised at 50/50 items, since extremes carry no new ranking information). `full` keeps 100%, `small` keeps 30%, `tiny` keeps 10%.
511
+ `--model` picks the item-response model (default `1pl`). `1pl` is the closed-form Rasch fit (`β̂_i = -log(p̂_i / (1 - p̂_i))`); `2pl` adds a per-item discrimination parameter and `3pl` a guessing floor, both via joint coordinate-ascent MLE (v0.71.6). Items rank by Fisher information at θ=0 (`p̂ · (1-p̂)` in 1PL — maximised at 50/50 items, since extremes carry no new ranking information). `full` keeps 100%, `small` keeps 30%, `tiny` keeps 10%.
509
512
 
510
513
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "soup-cli"
7
- version = "0.71.5"
7
+ version = "0.71.6"
8
8
  description = "Fine-tune 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 LLMs in one command."""
2
2
 
3
- __version__ = "0.71.5"
3
+ __version__ = "0.71.6"
@@ -327,12 +327,20 @@ def register(app: typer.Typer, console: Console) -> None:
327
327
  @app.command(name="irt-subset")
328
328
  def irt_subset_cmd(
329
329
  responses_path: str = typer.Argument(
330
- ..., help="Path to JSONL with rows {item_id, correct(bool), score?}.",
330
+ ...,
331
+ help=(
332
+ "Path to JSONL with rows {item_id, correct(bool), "
333
+ "respondent_id? (required for 2pl/3pl)}."
334
+ ),
331
335
  ),
332
336
  size: str = typer.Option(
333
337
  "small", "--size", "-z",
334
338
  help="Subset profile: full / small / tiny.",
335
339
  ),
340
+ model: str = typer.Option(
341
+ "1pl", "--model", "-m",
342
+ help="IRT model: 1pl (Rasch) / 2pl (discrimination) / 3pl (+ guessing).",
343
+ ),
336
344
  output: Optional[str] = typer.Option(
337
345
  None, "--output", "-o",
338
346
  help="Where to write the rendered IrtSubsetPlan JSON.",
@@ -341,7 +349,9 @@ def register(app: typer.Typer, console: Console) -> None:
341
349
  """Pick a minimum-cost eval subset that preserves ranking power."""
342
350
  from soup_cli.utils.irt import (
343
351
  IRT_PROFILES,
352
+ SUPPORTED_IRT_MODELS,
344
353
  fit_difficulty,
354
+ fit_irt,
345
355
  load_response_rows,
346
356
  pick_irt_subset,
347
357
  )
@@ -352,6 +362,12 @@ def register(app: typer.Typer, console: Console) -> None:
352
362
  f"(valid: {', '.join(sorted(IRT_PROFILES))})[/]"
353
363
  )
354
364
  raise typer.Exit(2)
365
+ if model not in SUPPORTED_IRT_MODELS:
366
+ console.print(
367
+ f"[red]Invalid --model: {escape(model)} "
368
+ f"(valid: {', '.join(SUPPORTED_IRT_MODELS)})[/]"
369
+ )
370
+ raise typer.Exit(2)
355
371
 
356
372
  try:
357
373
  rows = load_response_rows(responses_path)
@@ -360,13 +376,20 @@ def register(app: typer.Typer, console: Console) -> None:
360
376
  raise typer.Exit(2) from exc
361
377
 
362
378
  try:
363
- difficulty = fit_difficulty(rows)
364
- plan = pick_irt_subset(difficulty, size=size)
379
+ if model == "1pl":
380
+ # 1PL keeps the single-respondent correct-rate fit (back-compat;
381
+ # rows need only {item_id, correct}).
382
+ items = fit_difficulty(rows)
383
+ else:
384
+ # 2PL/3PL need a response matrix ({respondent_id, item_id, correct}).
385
+ items = fit_irt(rows, model=model)
386
+ plan = pick_irt_subset(items, size=size)
365
387
  except (TypeError, ValueError) as exc:
366
388
  console.print(f"[red]IRT fit failed:[/] {escape(str(exc))}")
367
389
  raise typer.Exit(2) from exc
368
390
 
369
391
  console.print(Panel(
392
+ f"Model: [bold]{escape(model)}[/]\n"
370
393
  f"Profile: [bold]{escape(plan.size)}[/]\n"
371
394
  f"Selected: {len(plan.item_ids)} / {plan.total_items}\n"
372
395
  f"Approx cost cut: {plan.cost_ratio:.1%}",
@@ -0,0 +1,92 @@
1
+ """soup build — dbt-for-SFT DAG of dataset transforms (v0.69.0 Part A).
2
+
3
+ Reads a YAML manifest, validates the model DAG, prints the topological plan,
4
+ and (with ``--dry-run``) exits cleanly. Without ``--dry-run`` the live runner
5
+ (v0.71.6 #231) materialises each model in topological order — ``table`` /
6
+ ``view`` / ``incremental`` kinds with a SQLite state store that re-runs the
7
+ transform on only the added/changed rows.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import typer
13
+ from rich.console import Console
14
+ from rich.markup import escape
15
+ from rich.panel import Panel
16
+ from rich.table import Table
17
+
18
+ console = Console()
19
+
20
+
21
+ def build_cmd(
22
+ config: str = typer.Argument(..., help="Path to build manifest (YAML)"),
23
+ output_dir: str = typer.Option(
24
+ "build_out",
25
+ "--output-dir",
26
+ "-o",
27
+ help="Directory (under cwd) for materialised model JSONL + state store.",
28
+ ),
29
+ dry_run: bool = typer.Option(
30
+ False,
31
+ "--dry-run",
32
+ help="Validate the manifest + print the topological plan; do not execute.",
33
+ ),
34
+ ) -> None:
35
+ """Validate a build DAG and (optionally) materialise it.
36
+
37
+ ``--dry-run`` only validates + prints the topological plan. Otherwise the
38
+ DAG is materialised under ``--output-dir`` (live as of v0.71.6 #231).
39
+ """
40
+ from soup_cli.utils.build_dag import (
41
+ load_build_yaml,
42
+ render_plan_table,
43
+ run_build,
44
+ )
45
+
46
+ try:
47
+ plan = load_build_yaml(config)
48
+ except (FileNotFoundError, TypeError, ValueError) as exc:
49
+ console.print(f"[red]{escape(str(exc))}[/]")
50
+ raise typer.Exit(2) from exc
51
+
52
+ rendered = render_plan_table(plan)
53
+ console.print(
54
+ Panel(
55
+ escape(rendered),
56
+ title=f"soup build — {escape(config)}",
57
+ )
58
+ )
59
+
60
+ if dry_run:
61
+ return
62
+
63
+ try:
64
+ result = run_build(plan, output_dir=output_dir)
65
+ except (FileNotFoundError, TypeError, ValueError) as exc:
66
+ console.print(f"[red]{escape(str(exc))}[/]")
67
+ raise typer.Exit(2) from exc
68
+
69
+ table = Table(title=f"Materialised — {escape(result.output_dir)}")
70
+ table.add_column("Model", style="bold")
71
+ table.add_column("Kind")
72
+ table.add_column("Rows in", justify="right")
73
+ table.add_column("Rows out", justify="right")
74
+ table.add_column("Transformed", justify="right")
75
+ table.add_column("Diff")
76
+ for model in result.models:
77
+ if model.diff is not None:
78
+ diff_str = (
79
+ f"+{model.diff.added} ~{model.diff.changed} "
80
+ f"-{model.diff.removed} ={model.diff.unchanged}"
81
+ )
82
+ else:
83
+ diff_str = "—"
84
+ table.add_row(
85
+ escape(model.name),
86
+ escape(model.kind),
87
+ str(model.rows_in),
88
+ str(model.rows_out),
89
+ str(model.transform_calls),
90
+ diff_str,
91
+ )
92
+ console.print(table)