soup-cli 0.71.28__tar.gz → 0.71.30__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.
- {soup_cli-0.71.28 → soup_cli-0.71.30}/CHANGELOG.md +67 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/CONTRIBUTING.md +4 -4
- {soup_cli-0.71.28 → soup_cli-0.71.30}/PKG-INFO +22 -20
- {soup_cli-0.71.28 → soup_cli-0.71.30}/README.md +21 -19
- {soup_cli-0.71.28 → soup_cli-0.71.30}/docs/README.md +1 -1
- {soup_cli-0.71.28 → soup_cli-0.71.30}/docs/commands.md +4 -1
- {soup_cli-0.71.28 → soup_cli-0.71.30}/docs/peft-and-efficiency.md +51 -0
- soup_cli-0.71.30/docs/superpowers/plans/2026-07-05-prm-guided-grpo.md +133 -0
- soup_cli-0.71.30/docs/superpowers/plans/2026-07-05-soup-shrink-depth-prune.md +607 -0
- soup_cli-0.71.30/docs/superpowers/specs/2026-07-05-prm-guided-grpo-design.md +152 -0
- soup_cli-0.71.30/docs/superpowers/specs/2026-07-05-soup-shrink-depth-prune-design.md +218 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/docs/training.md +56 -1
- {soup_cli-0.71.28 → soup_cli-0.71.30}/pyproject.toml +1 -1
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/cli.py +11 -0
- soup_cli-0.71.30/src/soup_cli/commands/shrink.py +656 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/config/schema.py +75 -0
- soup_cli-0.71.30/src/soup_cli/envs/__init__.py +18 -0
- soup_cli-0.71.30/src/soup_cli/envs/_common.py +29 -0
- soup_cli-0.71.30/src/soup_cli/envs/calculator.py +41 -0
- soup_cli-0.71.30/src/soup_cli/envs/guess_number.py +44 -0
- soup_cli-0.71.30/src/soup_cli/envs/retrieval_qa.py +54 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/recipes/catalog.py +99 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/registry/store.py +2 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/grpo.py +51 -31
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/prm.py +58 -2
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/live_eval.py +9 -2
- soup_cli-0.71.30/src/soup_cli/utils/prm_reward.py +373 -0
- soup_cli-0.71.30/src/soup_cli/utils/shrink.py +341 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_recipes.py +3 -2
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07124.py +3 -3
- soup_cli-0.71.30/tests/test_v07129.py +1267 -0
- soup_cli-0.71.30/tests/test_v07130.py +797 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/.dockerignore +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/.github/FUNDING.yml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/.github/pull_request_template.md +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/.gitignore +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/.mailmap +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/AGENTS.md +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/CODEOWNERS +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/CONTRIBUTORS.md +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/Dockerfile +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/LICENSE +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/NOTICE +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/SECURITY.md +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/docker-compose.yml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/docs/adapters-and-governance.md +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/docs/backends-and-ops.md +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/docs/data.md +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/docs/evaluation.md +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/docs/models.md +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/docs/performance-and-quantization.md +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/docs/serving-and-export.md +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/examples/README.md +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/examples/reward_hacking/rewards.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/soup.png +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/soup_logo_svg.svg +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/cloud/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/cloud/modal.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/_eval_v0650.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/_eval_v07110.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/adapters.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/advise.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/data.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/data_doctor.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/diagnose.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/mcp.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/ra_dit.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/serve.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/ship.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/spectrum.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/train.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/loader.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/mcp_server/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/mcp_server/registry.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/mcp_server/server.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/bitnet.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/mole_routing.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/ppo.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/raft.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/sft.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/tts.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/ui/app.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/advise.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/agent_sandbox.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/data_doctor.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/data_lint.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/diagnose/citation.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/diagnose/live.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/edit_kernels.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/harm_probe.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/hubs.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/interference_live.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/mod.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/peft_wiring.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/probe_kernel.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/ra_dit_run.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/raft.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/reward_hack_control.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/rl_checkpoint.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/ship_verdict.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/spectrum_scan.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/truth_probe.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/tts_codec.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/unlearn_kernels.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/templates/chat.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/templates/code.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/templates/medical.yaml +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/__init__.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/conftest.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/qa/v07114_qa.md +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_adapters.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_audio.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_autopilot.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_bco.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_bench.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_build_dag.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_callback.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_cans.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_chat.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_chat_template.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_cli.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_code_review_critical.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_code_review_deferred.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_code_review_high.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_code_review_medium_low.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_code_review_recurring.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_config.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_cost.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_curriculum.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_data.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_data_augment.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_data_sample.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_data_split.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_data_tools.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_diff.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_display.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_doctor.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_embedding.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_errors.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_eval.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_export.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_formats.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_generate.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_gpu.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_grpo.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_infer.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_init.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_ipo.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_kto.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_loader.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_log_level.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_merge.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_migrate.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_moe.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_orpo.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_packing.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_part_a_wave1.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_part_d.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_part_e.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_performance.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_ppo.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_pretrain.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_profile.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_profiling.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_progress.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_push.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_qat.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_quant_check.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_quickstart.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_registry.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_relora.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_replay.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_resume.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_rlvr.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_run_cost.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_runs.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_serve.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_server_generate.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_simpo.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_sweep.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_tracker.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_training_speed.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_tui.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_ui.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_unsloth.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0420.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0450.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0490.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0510.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0520.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0530.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v05310.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v05311.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0532.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0533.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0534.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0535.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0536.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0537.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0538.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0539.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0540.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0550.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0560.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0580.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0590.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07110.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07111.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07112.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07113.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07114.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07115.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07116.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07117.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07118.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07119.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0712.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07120.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07121.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07122.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07123.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07125.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07126.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07127.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v07128.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0713.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0714.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0715.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0716.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0717.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0718.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_v0719.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_validator.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_vision.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_warmup.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_why.py +0 -0
- {soup_cli-0.71.28 → soup_cli-0.71.30}/tests/test_windows_encoding.py +0 -0
|
@@ -12,6 +12,73 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.71.30] - 2026-07-05
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- **PRM-guided GRPO** — use a trained Process Reward Model as the *per-step*
|
|
19
|
+
reward inside GRPO (the o1-era process-supervision signal). Set
|
|
20
|
+
`training.prm_reward: <PRM dir|id>` (a model produced by `soup train`
|
|
21
|
+
`task=prm`) and `training.prm_aggregate: min|prod|last`; the PRM splits each
|
|
22
|
+
generated completion into reasoning steps, scores every step with its reward
|
|
23
|
+
head, and folds the per-step scores into one scalar reward that GRPO
|
|
24
|
+
optimises. The PRM reward *replaces* `reward_fn` and rides the existing
|
|
25
|
+
reward-shaping + reward-hack-mitigation seam, so the v0.71.26 controller
|
|
26
|
+
observes it. Cross-validators gate `task='grpo'` + `backend='transformers'` +
|
|
27
|
+
`modality='text'`. Default aggregation is `min` (weakest-link); `prod`
|
|
28
|
+
assumes calibrated `[0,1]` step scores.
|
|
29
|
+
- **Bundled rollout environments** — three pure-Python toy environments
|
|
30
|
+
(`soup_cli.envs.calculator` / `retrieval_qa` / `guess_number`) exposing a
|
|
31
|
+
`rollout(prompts)` entry point so the live `openenv` GRPO rollout path runs
|
|
32
|
+
out-of-the-box: `training.rollout_backend=openenv` +
|
|
33
|
+
`training.rollout_func=soup_cli.envs.calculator:rollout`. Three ready-made
|
|
34
|
+
recipes added (`grpo-env-calculator` / `grpo-env-retrieval-qa` /
|
|
35
|
+
`grpo-env-guess-number`); catalog 134 → 137.
|
|
36
|
+
|
|
37
|
+
### Fixed
|
|
38
|
+
- **`soup train task=prm` producer conformance** (surfaced by the v0.71.30 live
|
|
39
|
+
smoke): the PRM trainer now casts its reward head to the base-model dtype
|
|
40
|
+
(bf16 CUDA runs previously crashed on the first `compute_loss`), saves the
|
|
41
|
+
tokenizer alongside the model (so a PRM checkpoint is loadable standalone),
|
|
42
|
+
and returns the standard trainer-result shape (previously the CLI crashed with
|
|
43
|
+
a `KeyError: 'initial_loss'` right after saving).
|
|
44
|
+
|
|
45
|
+
### Notes
|
|
46
|
+
- Proof-of-mechanism only: validated on a tiny model (SmolLM2-135M) with a tiny
|
|
47
|
+
synthetic PRM and synthetic reward — not a production reward-model claim
|
|
48
|
+
(scale ask tracked in #286). The bundled environments are deterministic
|
|
49
|
+
single-shot *seeders*, not interactive multi-turn model-in-the-loop episodes
|
|
50
|
+
(the live `openenv` contract passes only prompts). Step split is a newline
|
|
51
|
+
heuristic; PRM completions are scored one forward pass each.
|
|
52
|
+
|
|
53
|
+
## [0.71.29] - 2026-07-05
|
|
54
|
+
|
|
55
|
+
### Added
|
|
56
|
+
- **`soup shrink`** — depth-prune a model + optional distill-heal
|
|
57
|
+
("The Unreasonable Ineffectiveness of the Deeper Layers", arXiv:2403.17887).
|
|
58
|
+
Ranks decoder layers by the angular distance of the residual stream across a
|
|
59
|
+
contiguous block over a calibration set, drops the least-important block
|
|
60
|
+
(first and last layer always protected), optionally *heals* by distilling the
|
|
61
|
+
original model into the pruned student, and emits a single dense smaller model
|
|
62
|
+
plus a one-screen **SHIP / DON'T SHIP** perplexity verdict.
|
|
63
|
+
`soup shrink --model <id|path> [--drop-ratio 0.25 | --drop-layers N] --calib
|
|
64
|
+
<calib.jsonl> [--heal <heal.jsonl> --heal-steps N] [--tolerance 0.10]
|
|
65
|
+
[-o <dir>] [--device cpu] [--attach-to-registry <id>] [--plan-only]`.
|
|
66
|
+
Exit codes: 0 = SHIP, 2 = DON'T SHIP, 1 = error. The heal runs as an isolated
|
|
67
|
+
`soup train` subprocess (LoRA-student logit distillation) and the adapter is
|
|
68
|
+
fused back so the shipped artifact stays a single dense model. Arch allowlist
|
|
69
|
+
v1: Llama / Qwen / SmolLM. Validated live on SmolLM2-135M (drop 25 %: 30 -> 22
|
|
70
|
+
layers, ppl x2.98 unhealed; drop 4 + heal: ppl x1.35, recovered).
|
|
71
|
+
|
|
72
|
+
### Security
|
|
73
|
+
- `soup shrink` contains `--calib` / `--heal` / `--output-dir` (and every
|
|
74
|
+
derived write path: `<out>/model`, `<out>/heal_adapter`, the fuse staging dir)
|
|
75
|
+
under cwd with `os.path.realpath` + `commonpath` + O_NOFOLLOW + symlink
|
|
76
|
+
rejection, re-validating derived paths right before each write (TOCTOU). The
|
|
77
|
+
heal subprocess uses an argv list (no shell) with a timeout; its config is
|
|
78
|
+
schema-validated before spawn; subprocess output is C0/ESC-stripped before it
|
|
79
|
+
reaches the terminal. `--model` defaults `trust_remote_code=False` with a
|
|
80
|
+
probe + warn.
|
|
81
|
+
|
|
15
82
|
## [0.71.28] - 2026-07-04
|
|
16
83
|
|
|
17
84
|
### Added
|
|
@@ -110,17 +110,17 @@ src/soup_cli/
|
|
|
110
110
|
experiment/ - SQLite experiment tracking
|
|
111
111
|
eval/ - Eval platform (custom tasks, LLM judge, human eval, leaderboard)
|
|
112
112
|
migrate/ - Config migration (LLaMA-Factory, Axolotl, Unsloth)
|
|
113
|
-
recipes/ - Ready-made configs for popular models (
|
|
113
|
+
recipes/ - Ready-made configs for popular models (137 recipes)
|
|
114
114
|
autopilot/ - Zero-config decision engine (v0.25.0)
|
|
115
115
|
registry/ - Model Registry (hashing, store, diff, attach) (v0.26.0 + v0.33.0)
|
|
116
116
|
cans/ - Shareable .can artifact format + run/publish orchestrator (v0.26.0 + v0.33.0)
|
|
117
117
|
data/traces/ - Trace-to-Preference harvester (v0.26.0)
|
|
118
118
|
data/collators.py - CrossDocCollator for sample packing (v0.33.0)
|
|
119
|
-
utils/ - GPU, errors, MoE, GaLore, QAT, Unsloth, vLLM, SGLang, Liger, FlashAttn, FSDP, Ring Attention, long-context, quality, curriculum, freeze, dataset-registry, mlx, peft_builder, paths, topology, launcher, mii, pipeline, cut_ce, fp8, gradient_ckpt, kernel_picker, cross_doc_attn, activation_offload, hf, spec_pairing, structured_output, metrics, tracing, auto_quant, lr_finder, grad_accum, mixed_precision, warmup, spike_recovery, convergence, v028_features, multipack_sampler, multipack, neat_packing, jinja_analyzer, quant_menu, relora, peft_patches, peft_wiring, dpo_variants, optimizer_zoo, lr_groups, loftq_init, block_expansion, tts, classifier, distill, bitnet, ebft_gdpo, moe_quant, reasoning_effort, gguf_quant, kv_cache, advanced_precision, save_formats, deploy_measure, advise, advise_history, adapter_diff, adapter_merge, blame, adapter_branch, unlearning, unlearning_eval, knowledge_edit, edit_governor, edit_diff, ra_dit, steering, citation_faithful, grace_codebook, ingest_sources, prune_prompt, active_sampler, ab_test, drift_alarm, tunability, terraform_plan, env_lock, hardware_fit, completions, license_advisor, behavior_battery, capability_suite, checklist_dsl, irt, sae_diff, sleeper_probe, interference, probe_pack, cmaes_merge, vector_bank, mole_routing, adapter_pr, soup_lock, adapter_bisect, prompt_compile, prompt_distill, compile_tools, apple_adapter, local_rl, build_dag, expectations, magpie, persona_hub, brain_rot, reward_hacking, uld, minillm, rl_checkpoint, iterative_dpo, echo_trap, mod, local_rl_scheduler, spectrum_scan, ship_verdict, reward_hack_control, data_doctor, data_lint
|
|
119
|
+
utils/ - GPU, errors, MoE, GaLore, QAT, Unsloth, vLLM, SGLang, Liger, FlashAttn, FSDP, Ring Attention, long-context, quality, curriculum, freeze, dataset-registry, mlx, peft_builder, paths, topology, launcher, mii, pipeline, cut_ce, fp8, gradient_ckpt, kernel_picker, cross_doc_attn, activation_offload, hf, spec_pairing, structured_output, metrics, tracing, auto_quant, lr_finder, grad_accum, mixed_precision, warmup, spike_recovery, convergence, v028_features, multipack_sampler, multipack, neat_packing, jinja_analyzer, quant_menu, relora, peft_patches, peft_wiring, dpo_variants, optimizer_zoo, lr_groups, loftq_init, block_expansion, tts, classifier, distill, bitnet, ebft_gdpo, moe_quant, reasoning_effort, gguf_quant, kv_cache, advanced_precision, save_formats, deploy_measure, advise, advise_history, adapter_diff, adapter_merge, blame, adapter_branch, unlearning, unlearning_eval, knowledge_edit, edit_governor, edit_diff, ra_dit, steering, citation_faithful, grace_codebook, ingest_sources, prune_prompt, active_sampler, ab_test, drift_alarm, tunability, terraform_plan, env_lock, hardware_fit, completions, license_advisor, behavior_battery, capability_suite, checklist_dsl, irt, sae_diff, sleeper_probe, interference, probe_pack, cmaes_merge, vector_bank, mole_routing, adapter_pr, soup_lock, adapter_bisect, prompt_compile, prompt_distill, compile_tools, apple_adapter, local_rl, build_dag, expectations, magpie, persona_hub, brain_rot, reward_hacking, uld, minillm, rl_checkpoint, iterative_dpo, echo_trap, mod, local_rl_scheduler, spectrum_scan, ship_verdict, reward_hack_control, data_doctor, data_lint, shrink
|
|
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 (
|
|
123
|
+
tests/ - Test suite (307 files, 15334 tests)
|
|
124
124
|
examples/ - Real-world config examples and datasets
|
|
125
125
|
```
|
|
126
126
|
|
|
@@ -150,7 +150,7 @@ pytest tests/test_data.py::test_detect_alpaca_format -v
|
|
|
150
150
|
pytest tests/ --cov=soup_cli --cov-report=html
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
-
### Test Files (
|
|
153
|
+
### Test Files (306 files)
|
|
154
154
|
|
|
155
155
|
> A representative sample of the suite below. The full table lives in
|
|
156
156
|
> [`.claude/CLAUDE.md`](.claude/CLAUDE.md); run `pytest tests/ -v` for the complete list.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: soup-cli
|
|
3
|
-
Version: 0.71.
|
|
3
|
+
Version: 0.71.30
|
|
4
4
|
Summary: Fine-tune and post-train LLMs in one command. No SSH, no config hell.
|
|
5
5
|
Project-URL: Homepage, https://github.com/MakazhanAlpamys/Soup
|
|
6
6
|
Project-URL: Repository, https://github.com/MakazhanAlpamys/Soup
|
|
@@ -193,25 +193,27 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
193
193
|
|
|
194
194
|
## What's New
|
|
195
195
|
|
|
196
|
-
**v0.71.
|
|
197
|
-
|
|
198
|
-
- **
|
|
199
|
-
`
|
|
200
|
-
`
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
- **
|
|
207
|
-
|
|
208
|
-
- **Live-validated on
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
|
|
196
|
+
**v0.71.30 — Process-supervised RL: PRM-guided GRPO.** Use a trained Process Reward Model to score each *reasoning step* of a GRPO completion — the o1-era training signal — plus bundled toy environments so the openenv rollout path runs out-of-the-box.
|
|
197
|
+
|
|
198
|
+
- **PRM as the GRPO reward.** Point `training.prm_reward` at a PRM you trained with
|
|
199
|
+
`soup train task=prm`; it splits each completion into steps, scores every step with the PRM's
|
|
200
|
+
reward head, and folds them (`min` / `prod` / `last`) into one reward that GRPO optimises —
|
|
201
|
+
replacing `reward_fn`. It rides the reward-shaping + reward-hack-mitigation seam, so the
|
|
202
|
+
v0.71.26 controller still watches it.
|
|
203
|
+
- **Bundled rollout environments.** `soup_cli.envs.calculator` / `retrieval_qa` / `guess_number`
|
|
204
|
+
each expose a `rollout(prompts)` entry point; wire one with `rollout_backend=openenv` +
|
|
205
|
+
`rollout_func=soup_cli.envs.calculator:rollout` (three ready-made `grpo-env-*` recipes ship it).
|
|
206
|
+
- **Producer fixes too.** `soup train task=prm` now saves its tokenizer and no longer crashes on
|
|
207
|
+
its own summary — a PRM checkpoint is loadable standalone.
|
|
208
|
+
- **Proof-of-mechanism, honestly.** Live-validated on SmolLM2-135M (CPU): the PRM reward scores
|
|
209
|
+
good completions above bad and drives GRPO's advantages (`rewards/prm_reward` logged). Tiny
|
|
210
|
+
model + synthetic PRM — not a production reward-model claim (scale help wanted: #286).
|
|
211
|
+
|
|
212
|
+
```yaml
|
|
213
|
+
task: grpo
|
|
214
|
+
training:
|
|
215
|
+
prm_reward: ./my-prm # a `soup train task=prm` checkpoint dir
|
|
216
|
+
prm_aggregate: min # weakest-link (default) | prod | last
|
|
215
217
|
```
|
|
216
218
|
|
|
217
219
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
@@ -49,25 +49,27 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
49
49
|
|
|
50
50
|
## What's New
|
|
51
51
|
|
|
52
|
-
**v0.71.
|
|
53
|
-
|
|
54
|
-
- **
|
|
55
|
-
`
|
|
56
|
-
`
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
- **
|
|
63
|
-
|
|
64
|
-
- **Live-validated on
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
|
|
52
|
+
**v0.71.30 — Process-supervised RL: PRM-guided GRPO.** Use a trained Process Reward Model to score each *reasoning step* of a GRPO completion — the o1-era training signal — plus bundled toy environments so the openenv rollout path runs out-of-the-box.
|
|
53
|
+
|
|
54
|
+
- **PRM as the GRPO reward.** Point `training.prm_reward` at a PRM you trained with
|
|
55
|
+
`soup train task=prm`; it splits each completion into steps, scores every step with the PRM's
|
|
56
|
+
reward head, and folds them (`min` / `prod` / `last`) into one reward that GRPO optimises —
|
|
57
|
+
replacing `reward_fn`. It rides the reward-shaping + reward-hack-mitigation seam, so the
|
|
58
|
+
v0.71.26 controller still watches it.
|
|
59
|
+
- **Bundled rollout environments.** `soup_cli.envs.calculator` / `retrieval_qa` / `guess_number`
|
|
60
|
+
each expose a `rollout(prompts)` entry point; wire one with `rollout_backend=openenv` +
|
|
61
|
+
`rollout_func=soup_cli.envs.calculator:rollout` (three ready-made `grpo-env-*` recipes ship it).
|
|
62
|
+
- **Producer fixes too.** `soup train task=prm` now saves its tokenizer and no longer crashes on
|
|
63
|
+
its own summary — a PRM checkpoint is loadable standalone.
|
|
64
|
+
- **Proof-of-mechanism, honestly.** Live-validated on SmolLM2-135M (CPU): the PRM reward scores
|
|
65
|
+
good completions above bad and drives GRPO's advantages (`rewards/prm_reward` logged). Tiny
|
|
66
|
+
model + synthetic PRM — not a production reward-model claim (scale help wanted: #286).
|
|
67
|
+
|
|
68
|
+
```yaml
|
|
69
|
+
task: grpo
|
|
70
|
+
training:
|
|
71
|
+
prm_reward: ./my-prm # a `soup train task=prm` checkpoint dir
|
|
72
|
+
prm_aggregate: min # weakest-link (default) | prod | last
|
|
71
73
|
```
|
|
72
74
|
|
|
73
75
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
@@ -8,7 +8,7 @@ feature reference — every `soup` capability, grouped by area.
|
|
|
8
8
|
| Guide | Covers |
|
|
9
9
|
|---|---|
|
|
10
10
|
| [Training tasks & methods](training.md) | SFT, DPO/GRPO/PPO/KTO/ORPO/SimPO/IPO/BCO, tool-calling, PRM, pre-training, distillation, classification, vision/audio/TTS, unlearning, RAFT/RA-DIT, loop-hardening detectors |
|
|
11
|
-
| [PEFT, long context & efficiency](peft-and-efficiency.md) | DoRA, LoRA+, rsLoRA, VeRA, OLoRA, NEFTune, PiSSA, ReLoRA, optimizer & PEFT zoo, LLaMA Pro, GaLore, YaRN/LongLoRA, packing, curriculum, auto-tuning |
|
|
11
|
+
| [PEFT, long context & efficiency](peft-and-efficiency.md) | DoRA, LoRA+, rsLoRA, VeRA, OLoRA, NEFTune, PiSSA, ReLoRA, optimizer & PEFT zoo, LLaMA Pro, GaLore, YaRN/LongLoRA, packing, curriculum, auto-tuning, depth pruning + distill-heal (`soup shrink`) |
|
|
12
12
|
| [Performance & quantization](performance-and-quantization.md) | QAT, FP8, Quant Menu (I + II), KV-cache, NVFP4, save formats, Cut Cross-Entropy, gradient checkpointing, kernels, activation offloading, multi-GPU / DeepSpeed / FSDP |
|
|
13
13
|
| [Data engineering](data.md) | Formats, the Axolotl/LF-parity pipeline, data tools, synthetic generation & forge, quality scorecards, trace tooling, remote datasets, mixing, recipe DAGs |
|
|
14
14
|
| [Evaluation & probes](evaluation.md) | Eval design/gate, eval-gated training, benchmarks, NLG metrics, calibration, Elo arena, diagnose, `soup ship` verdict, post-train X-ray probes, A/B, drift, tunability, `soup advise` |
|
|
@@ -133,7 +133,7 @@ soup migrate --from llamafactory config.yaml Import config from LLaMA-Factory
|
|
|
133
133
|
soup migrate --from axolotl config.yml Import config from Axolotl
|
|
134
134
|
soup migrate --from unsloth notebook.ipynb Import config from Unsloth notebook
|
|
135
135
|
soup migrate --from llamafactory c.yaml --dry-run Preview without writing
|
|
136
|
-
soup recipes list List all
|
|
136
|
+
soup recipes list List all 137 ready-made recipes
|
|
137
137
|
soup recipes show llama3.1-8b-sft Print recipe YAML
|
|
138
138
|
soup recipes use llama3.1-8b-sft Copy recipe to soup.yaml
|
|
139
139
|
soup recipes search "reasoning" Search by keyword/task/size
|
|
@@ -158,6 +158,9 @@ soup ship ... --task-mode judge_score --judge-model ollama://llama3.1 Leg-1 via
|
|
|
158
158
|
soup ship ... --general-suite mmlu,gsm8k --baseline base.json lm-eval leg-2 + recorded base scores
|
|
159
159
|
soup mcp serve MCP server over stdio (drive Soup from Claude Code / Cursor / Cline; requires [mcp] extra) (v0.71.28)
|
|
160
160
|
soup mcp serve --allow-mutating Also expose plan-only train_start / export tools (never execute) (v0.71.28)
|
|
161
|
+
soup shrink --model <id|path> --drop-ratio 0.25 --calib c.jsonl -o shrunk Depth-prune least-important layer block + SHIP/DON'T-SHIP ppl verdict (exit 0/2/1) (v0.71.29)
|
|
162
|
+
soup shrink ... --drop-layers N --heal h.jsonl --heal-steps 200 --device cpu Drop N layers + distill-heal (fuse LoRA back to one dense model)
|
|
163
|
+
soup shrink ... --tolerance 0.10 --plan-only [--attach-to-registry <id>] Ppl-regression tolerance / print importance table only / registry attach
|
|
161
164
|
soup tui Full-screen Textual dashboard (requires [tui] extra)
|
|
162
165
|
soup train --config soup.yaml --profile Record torch.profiler trace to <output>/profiles/
|
|
163
166
|
soup --log-level quiet|normal|verbose|debug Global logging tier (Rich-formatted)
|
|
@@ -24,6 +24,57 @@
|
|
|
24
24
|
- [Training Stability & Auto-Tuning](#training-stability--auto-tuning)
|
|
25
25
|
- [Training Intelligence (Forgetting + Checkpoint Quality)](#training-intelligence-forgetting--checkpoint-quality)
|
|
26
26
|
- [GaLore (Memory-Efficient Full-Parameter Training)](#galore-memory-efficient-full-parameter-training)
|
|
27
|
+
- [Depth Pruning + Distill-Heal (`soup shrink`)](#depth-pruning--distill-heal-soup-shrink)
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Depth Pruning + Distill-Heal (`soup shrink`)
|
|
32
|
+
|
|
33
|
+
`soup shrink` makes a model smaller by dropping its least-important **contiguous
|
|
34
|
+
block of decoder layers**, then optionally *healing* the loss with knowledge
|
|
35
|
+
distillation. It implements "The Unreasonable Ineffectiveness of the Deeper
|
|
36
|
+
Layers" (Gromov et al., arXiv:2403.17887), with a Minitron-style distillation
|
|
37
|
+
heal instead of the paper's plain LoRA fine-tune.
|
|
38
|
+
|
|
39
|
+
**How it ranks layers.** For each candidate block `[L, L+n)`, one forward pass
|
|
40
|
+
per calibration prompt (`output_hidden_states=True`) measures the **angular
|
|
41
|
+
distance** of the residual stream entering (`hidden_states[L]`) vs leaving
|
|
42
|
+
(`hidden_states[L+n]`) the block, averaged over every non-pad token across the
|
|
43
|
+
calibration set. The block with the *lowest* distance transforms the residual
|
|
44
|
+
stream least, so it is the safest to drop. The first and last decoder layers are
|
|
45
|
+
always protected (they carry the most transformation).
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# See the importance table + chosen block without writing anything:
|
|
49
|
+
soup shrink --model HuggingFaceTB/SmolLM2-135M-Instruct --drop-ratio 0.25 \
|
|
50
|
+
--calib calib.jsonl --device cpu --plan-only
|
|
51
|
+
|
|
52
|
+
# Prune 25% + heal (distill the original into the pruned student, fuse to one
|
|
53
|
+
# dense model) + get a SHIP/DON'T-SHIP perplexity verdict:
|
|
54
|
+
soup shrink --model HuggingFaceTB/SmolLM2-135M-Instruct --drop-ratio 0.25 \
|
|
55
|
+
--calib calib.jsonl --heal heal.jsonl --heal-steps 200 \
|
|
56
|
+
--tolerance 0.10 -o shrunk --device cpu --attach-to-registry <id>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
- **`--drop-ratio F` / `--drop-layers N`** (exactly one) — how many contiguous
|
|
60
|
+
layers to drop; the *position* is chosen automatically by the importance scan.
|
|
61
|
+
- **`--calib <jsonl>`** — calibration prompts (`{"text": ...}` / `{"prompt":
|
|
62
|
+
...}` / chat `messages`). Must stay under cwd.
|
|
63
|
+
- **`--heal <jsonl> --heal-steps N`** — distill the full-depth original into the
|
|
64
|
+
pruned student (LoRA logit-KD) as an isolated `soup train` subprocess, then
|
|
65
|
+
fuse the adapter back into the pruned base so the output is a single dense
|
|
66
|
+
model. Heal keeps the teacher resident (~2× model memory); with `--device
|
|
67
|
+
cpu` the heal runs on CPU (validated ≤ 3 B on a 4 GB card).
|
|
68
|
+
- **`--tolerance F`** — ship if the perplexity regression stays within `F`
|
|
69
|
+
(default `0.10` = 10 %). Exit code `0 = SHIP`, `2 = DON'T SHIP`, `1 = error`.
|
|
70
|
+
- **`-o <dir>`** — the shrunk model lands in `<dir>/model`; the verdict in
|
|
71
|
+
`<dir>/shrink_report.json`.
|
|
72
|
+
|
|
73
|
+
**Arch support (v1):** Llama / Qwen / SmolLM. Others are a friendly reject.
|
|
74
|
+
The importance pass loads the model, so live-validated on ≤ 3 B; larger models
|
|
75
|
+
work but are unvalidated on the reference hardware. Perplexity is an unweighted
|
|
76
|
+
mean of per-example perplexities — valid for the before/after *ratio* the
|
|
77
|
+
verdict uses, not directly comparable to `soup eval` absolute numbers.
|
|
27
78
|
|
|
28
79
|
---
|
|
29
80
|
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# PRM-guided GRPO + bundled rollout envs — Implementation Plan
|
|
2
|
+
|
|
3
|
+
> **For agentic workers:** REQUIRED SUB-SKILL: superpowers:test-driven-development, task-by-task. Steps use checkbox (`- [ ]`) syntax.
|
|
4
|
+
|
|
5
|
+
**Goal:** Let a trained Soup PRM score each reasoning step of a GRPO completion as the reward signal, and bundle 3 pure-python toy environments that seed the live `openenv` rollout path out-of-the-box.
|
|
6
|
+
|
|
7
|
+
**Architecture:** A pure-kernel + torch-lazy `PRMScorer` in `utils/prm_reward.py` becomes the GRPO `reward_fn` when `training.prm_reward` is set (replacing the configured reward, riding the existing shaping+buffer seam). Three `soup_cli/envs/*.py` modules expose `rollout(prompts)` entry points wired via `training.rollout_func`. Schema fields + cross-validators gate both.
|
|
8
|
+
|
|
9
|
+
**Tech Stack:** Python 3.10+, Pydantic v2, torch/transformers/safetensors (lazy), TRL GRPO, pytest.
|
|
10
|
+
|
|
11
|
+
## Global Constraints
|
|
12
|
+
|
|
13
|
+
- Line length 100 (ruff E,F,I,N,W). No bare `print()` — use `rich.console.Console`.
|
|
14
|
+
- Lazy imports for torch/transformers/peft/safetensors inside functions, never module-level.
|
|
15
|
+
- Path containment: `os.path.realpath` + `os.path.commonpath`, NOT `Path.resolve()+relative_to()`.
|
|
16
|
+
- Pydantic v2 models in `config/schema.py`; assert specific error keywords in tests.
|
|
17
|
+
- Test file: `tests/test_v07130.py`. Use `assert result.exit_code == 0, (result.output, repr(result.exception))`.
|
|
18
|
+
- Version target: `0.71.29 → 0.71.30` (bump in `pyproject.toml` + `src/soup_cli/__init__.py`).
|
|
19
|
+
- Proof-of-mechanism honesty: tiny model / synthetic data only; scale ask extends #286.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
### Task 1: PRM reward pure kernels
|
|
24
|
+
|
|
25
|
+
**Files:**
|
|
26
|
+
- Create: `src/soup_cli/utils/prm_reward.py`
|
|
27
|
+
- Test: `tests/test_v07130.py`
|
|
28
|
+
|
|
29
|
+
**Interfaces:**
|
|
30
|
+
- Produces: `split_steps(text: str) -> list[str]`, `aggregate_step_scores(scores: list[float], mode: str) -> float`, module constants `_MAX_STEPS`, `_MAX_STEP_CHARS`, `AGGREGATE_MODES: tuple[str,...]`.
|
|
31
|
+
|
|
32
|
+
- [ ] Step 1: Write failing tests `TestSplitSteps` (newline split; drop empty/whitespace; count cap `_MAX_STEPS`; per-step char cap; non-str→`[]`) and `TestAggregate` (min/prod/last correctness; empty→0.0; single; non-finite→treated safe; bad mode `ValueError` names modes; bool reject).
|
|
33
|
+
- [ ] Step 2: Run — expect ImportError / fail.
|
|
34
|
+
- [ ] Step 3: Implement kernels (no top-level torch). `split_steps`: `str.splitlines()`, strip, drop empties, truncate each to `_MAX_STEP_CHARS`, cap list to `_MAX_STEPS`. `aggregate_step_scores`: validate mode in `AGGREGATE_MODES`; empty→0.0; `min`→min, `last`→scores[-1], `prod`→math.prod; coerce non-finite to 0.0.
|
|
35
|
+
- [ ] Step 4: Run tests → PASS.
|
|
36
|
+
- [ ] Step 5: `ruff check` + commit `feat(prm): PRM reward pure kernels (split_steps/aggregate) (v0.71.30)`.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
### Task 2: Schema fields + cross-validators
|
|
41
|
+
|
|
42
|
+
**Files:**
|
|
43
|
+
- Modify: `src/soup_cli/config/schema.py` (TrainingConfig fields near `reward_fn` ~L1043; field_validator; SoupConfig cross-validator near `_validate_rollout_backend` ~L4183)
|
|
44
|
+
- Test: `tests/test_v07130.py`
|
|
45
|
+
|
|
46
|
+
**Interfaces:**
|
|
47
|
+
- Produces: `TrainingConfig.prm_reward: Optional[str]`, `TrainingConfig.prm_aggregate: Literal["min","prod","last"]`; a `SoupConfig` `model_validator(mode="after")` `_validate_prm_reward`.
|
|
48
|
+
|
|
49
|
+
- [ ] Step 1: Write failing `TestPrmSchema` — happy config (task=grpo, transformers, text, prm_reward set, prm_aggregate=prod) parses via `load_config_from_string`; rejects: task≠grpo ("requires task='grpo'"), backend=mlx/unsloth ("transformers"), modality≠text ("modality='text'"), `prm_aggregate` non-default while `prm_reward None` (footgun keyword), null-byte prm_reward, oversize prm_reward.
|
|
50
|
+
- [ ] Step 2: Run → fail (fields absent).
|
|
51
|
+
- [ ] Step 3: Add fields + `field_validator("prm_reward", mode="before")` (null-byte/non-str/len≤512 reject) + SoupConfig `_validate_prm_reward` cross-validator (gates task/backend/modality; footgun on aggregate). Mirror `_validate_rollout_backend`.
|
|
52
|
+
- [ ] Step 4: Run → PASS.
|
|
53
|
+
- [ ] Step 5: ruff + commit `feat(prm): schema prm_reward/prm_aggregate + cross-validators (v0.71.30)`.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
### Task 3: PRMScorer + build_prm_reward_fn (torch-lazy load + scoring)
|
|
58
|
+
|
|
59
|
+
**Files:**
|
|
60
|
+
- Modify: `src/soup_cli/utils/prm_reward.py`
|
|
61
|
+
- Test: `tests/test_v07130.py`
|
|
62
|
+
|
|
63
|
+
**Interfaces:**
|
|
64
|
+
- Consumes: `split_steps`, `aggregate_step_scores` (Task 1); `TrainingConfig` (Task 2).
|
|
65
|
+
- Produces: `PRMScorer(prm_path, aggregate, device="cpu", trust_remote_code=False)` with `__call__(completions, **kwargs) -> list[float]` and `__name__="prm_reward"`; `build_prm_reward_fn(tcfg, device, trust_remote_code) -> PRMScorer`; `load_reward_head_weights(prm_path) -> dict` helper.
|
|
66
|
+
|
|
67
|
+
- [ ] Step 1: Write failing `TestPRMScorer` — fixture: build a tiny `AutoModelForCausalLM` from a 2-layer config, attach `reward_head=nn.Linear(hidden,1)`, `save_pretrained(tmp)`; `PRMScorer(tmp,"min","cpu")` scores `[[{"role":"assistant","content":"step1\nstep2"}]]` → list len 1 of finite float. "not a PRM" fixture (base with no reward_head) → friendly `ValueError`/`RuntimeError` naming "reward_head". `build_prm_reward_fn` returns callable with `__name__=="prm_reward"`; outside-cwd path → containment reject.
|
|
68
|
+
- [ ] Step 2: Run → fail.
|
|
69
|
+
- [ ] Step 3: Implement. `load_reward_head_weights`: iterate `*.safetensors` in dir via `safetensors.safe_open`, collect `reward_head.*` tensors; empty→raise. `PRMScorer._ensure_loaded`: lazy tokenizer + `AutoModelForCausalLM.from_pretrained`, `reward_head=nn.Linear(hidden,1)`, `load_state_dict` the head, `eval()`+`requires_grad_(False)`+`.to(device)`. `__call__`: per completion → render prompt (from `kwargs["prompts"]`) + steps, tokenize, `no_grad` `output_hidden_states` forward, gather boundary hidden, `reward_head`→scalars, `aggregate_step_scores`. `build_prm_reward_fn`: realpath+commonpath containment for local paths, trust_remote_code probe+warn.
|
|
70
|
+
- [ ] Step 4: Run → PASS.
|
|
71
|
+
- [ ] Step 5: ruff + commit `feat(prm): PRMScorer + build_prm_reward_fn (safetensors head load) (v0.71.30)`.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
### Task 4: GRPO integration
|
|
76
|
+
|
|
77
|
+
**Files:**
|
|
78
|
+
- Modify: `src/soup_cli/trainer/grpo.py` (`setup()`, the `load_reward_fn` block ~L224-229)
|
|
79
|
+
- Test: `tests/test_v07130.py`
|
|
80
|
+
|
|
81
|
+
**Interfaces:**
|
|
82
|
+
- Consumes: `build_prm_reward_fn` (Task 3).
|
|
83
|
+
|
|
84
|
+
- [ ] Step 1: Write failing `TestGrpoPrmWiring` — construct a SoupConfig with `prm_reward` set, monkeypatch `build_prm_reward_fn` to a sentinel, call the reward-selection path (extract a small helper `_select_reward_fn(tcfg, device, trust)` if cleaner, or assert via the setup path with mocked model load), assert the PRM scorer is chosen (not `load_reward_fn`).
|
|
85
|
+
- [ ] Step 2: Run → fail.
|
|
86
|
+
- [ ] Step 3: In `setup()`: `if tcfg.prm_reward is not None: reward_fn = build_prm_reward_fn(tcfg, self.device, self._trust_remote_code) else: reward_fn = load_reward_fn(...)`. Keep the shaping+buffer wrapping downstream unchanged.
|
|
87
|
+
- [ ] Step 4: Run → PASS.
|
|
88
|
+
- [ ] Step 5: ruff + commit `feat(prm): wire PRM reward into GRPO setup (v0.71.30)`.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
### Task 5: Bundled rollout envs
|
|
93
|
+
|
|
94
|
+
**Files:**
|
|
95
|
+
- Create: `src/soup_cli/envs/__init__.py`, `calculator.py`, `retrieval_qa.py`, `guess_number.py`
|
|
96
|
+
- Test: `tests/test_v07130.py`
|
|
97
|
+
|
|
98
|
+
**Interfaces:**
|
|
99
|
+
- Produces: `soup_cli.envs.calculator:rollout`, `...retrieval_qa:rollout`, `...guess_number:rollout` — each `rollout(prompts) -> list[{"prompt": str, "answer": str}]`, deterministic (seeded `random.Random`), no I/O.
|
|
100
|
+
|
|
101
|
+
- [ ] Step 1: Write failing `TestEnvs` — each `rollout([])` returns non-empty rows; every row passes `agent_rollout._normalise_rollout_rows(rows, "openenv")`; determinism (two calls equal); calculator answers verified (parse "a OP b" from prompt, compute, assert == answer).
|
|
102
|
+
- [ ] Step 2: Run → fail.
|
|
103
|
+
- [ ] Step 3: Implement 3 modules. Each builds a fixed count of {prompt, answer} rows via `random.Random(seed)` (fixed seed → deterministic; no `Math.random`/wall-clock). calculator: arithmetic; retrieval_qa: doc+question, answer=span; guess_number: constraint deduction puzzles with a unique integer answer.
|
|
104
|
+
- [ ] Step 4: Run → PASS.
|
|
105
|
+
- [ ] Step 5: ruff + commit `feat(envs): bundled calculator/retrieval-qa/guess-number rollout envs (v0.71.30)`.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
### Task 6: Recipes + no-top-level-torch AST test
|
|
110
|
+
|
|
111
|
+
**Files:**
|
|
112
|
+
- Modify: `src/soup_cli/recipes/catalog.py` (+3 GRPO env recipes)
|
|
113
|
+
- Test: `tests/test_v07130.py`
|
|
114
|
+
|
|
115
|
+
- [ ] Step 1: Write failing `TestRecipes` (3 new recipe names resolve + their YAML parses via `load_config_from_string`) + `TestNoTopLevelTorch` (AST-parse `utils/prm_reward.py`, assert no top-level `import torch/transformers/peft`).
|
|
116
|
+
- [ ] Step 2: Run → fail.
|
|
117
|
+
- [ ] Step 3: Add `grpo-env-calculator` / `grpo-env-retrieval-qa` / `grpo-env-guess-number` RecipeMeta entries (SmolLM2-135M, task=grpo, rollout_backend=openenv, rollout_func=`soup_cli.envs.*:rollout`, reward_fn=math/accuracy). Confirm the no-top-level-torch already holds.
|
|
118
|
+
- [ ] Step 4: Run → PASS.
|
|
119
|
+
- [ ] Step 5: ruff + commit `feat(recipes): 3 GRPO env recipes + AST purity test (v0.71.30)`.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
### Task 7: Release docs (Release Checklist steps 7-13)
|
|
124
|
+
|
|
125
|
+
Version bump (`pyproject.toml` + `__init__.py` → 0.71.30); CHANGELOG; CLAUDE.md (arch line for `utils/prm_reward.py` + `envs/`, schema field list, CLI/train notes, recipe count 134→137, test-count refs, history-roll to `.claude/history/release-notes.md` + `tests-index.md`); README What's New; `docs/training.md` + `docs/commands.md`; CONTRIBUTING counts; plan.md flip. Handled after Tasks 1-6 pass the 5-review round + Step-6 smoke.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Self-review
|
|
130
|
+
|
|
131
|
+
- **Spec coverage:** Part A schema (T2) + kernels (T1) + scorer (T3) + wiring (T4); Part B envs (T5) + recipes (T6); docs (T7). ✅
|
|
132
|
+
- **Type consistency:** `split_steps`/`aggregate_step_scores` (T1) consumed by `PRMScorer` (T3); `build_prm_reward_fn` (T3) consumed by grpo (T4); `rollout` signature uniform (T5). ✅
|
|
133
|
+
- **Placeholders:** none — each task has concrete test targets + implementation sketch (full code written during TDD RED/GREEN).
|