soup-cli 0.71.24__tar.gz → 0.71.26__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.24 → soup_cli-0.71.26}/CHANGELOG.md +70 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/CONTRIBUTING.md +4 -4
- {soup_cli-0.71.24 → soup_cli-0.71.26}/CONTRIBUTORS.md +3 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/PKG-INFO +23 -11
- {soup_cli-0.71.24 → soup_cli-0.71.26}/README.md +23 -11
- {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/README.md +1 -1
- {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/commands.md +6 -1
- {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/evaluation.md +56 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/serving-and-export.md +2 -2
- {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/training.md +15 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/README.md +11 -0
- soup_cli-0.71.26/examples/reward_hacking/rewards.py +83 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/pyproject.toml +1 -1
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cli.py +12 -0
- soup_cli-0.71.26/src/soup_cli/commands/ship.py +609 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/train.py +77 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/config/schema.py +437 -4
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/monitoring/trace_logger.py +5 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/recipes/catalog.py +29 -1
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/grpo.py +5 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/ppo.py +40 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/errors.py +51 -4
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/peft_wiring.py +166 -45
- soup_cli-0.71.26/src/soup_cli/utils/reward_hack_control.py +1122 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/reward_hacking.py +12 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/rl_checkpoint.py +78 -11
- soup_cli-0.71.26/src/soup_cli/utils/ship_verdict.py +424 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_errors.py +58 -1
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_recipes.py +3 -2
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07124.py +3 -3
- soup_cli-0.71.26/tests/test_v07125.py +1014 -0
- soup_cli-0.71.26/tests/test_v07126.py +2315 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/.dockerignore +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/FUNDING.yml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/pull_request_template.md +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/.gitignore +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/.mailmap +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/AGENTS.md +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/CODEOWNERS +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/Dockerfile +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/LICENSE +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/NOTICE +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/SECURITY.md +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/docker-compose.yml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/adapters-and-governance.md +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/backends-and-ops.md +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/data.md +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/models.md +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/peft-and-efficiency.md +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/docs/performance-and-quantization.md +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/soup.png +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/soup_logo_svg.svg +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cloud/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/cloud/modal.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/_eval_v0650.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/_eval_v07110.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/adapters.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/advise.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/data.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/diagnose.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/ra_dit.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/serve.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/spectrum.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/loader.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/registry/store.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/bitnet.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/mole_routing.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/raft.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/sft.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/tts.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/ui/app.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/advise.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/agent_sandbox.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/citation.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/live.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/edit_kernels.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/harm_probe.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/hubs.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/interference_live.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/live_eval.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/mod.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/probe_kernel.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ra_dit_run.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/raft.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/spectrum_scan.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/truth_probe.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/tts_codec.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/unlearn_kernels.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/templates/chat.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/templates/code.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/templates/medical.yaml +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/__init__.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/conftest.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/qa/v07114_qa.md +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_adapters.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_audio.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_autopilot.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_bco.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_bench.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_build_dag.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_callback.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_cans.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_chat.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_chat_template.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_cli.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_config.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_cost.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_curriculum.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_data.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_data_augment.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_data_sample.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_data_split.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_data_tools.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_diff.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_display.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_doctor.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_embedding.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_eval.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_export.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_formats.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_generate.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_gpu.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_grpo.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_infer.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_init.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_ipo.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_kto.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_loader.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_log_level.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_merge.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_migrate.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_moe.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_orpo.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_packing.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_part_a_wave1.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_part_d.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_part_e.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_performance.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_ppo.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_pretrain.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_profile.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_profiling.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_progress.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_push.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_qat.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_quant_check.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_quickstart.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_registry.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_relora.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_replay.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_resume.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_rlvr.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_run_cost.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_runs.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_serve.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_server_generate.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_simpo.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_sweep.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_tracker.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_training_speed.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_tui.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_ui.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_unsloth.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0420.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0450.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0490.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0510.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0520.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0530.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v05310.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v05311.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0532.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0533.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0534.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0535.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0536.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0537.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0538.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0539.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0540.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0550.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0560.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0580.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0590.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07110.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07111.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07112.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07113.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07114.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07115.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07116.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07117.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07118.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07119.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0712.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07120.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07121.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07122.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v07123.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0713.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0714.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0715.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0716.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0717.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0718.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_v0719.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_validator.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_vision.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_warmup.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_why.py +0 -0
- {soup_cli-0.71.24 → soup_cli-0.71.26}/tests/test_windows_encoding.py +0 -0
|
@@ -12,6 +12,76 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.71.26] - 2026-07-01
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- **Closed-loop reward-hacking auto-mitigation.** The trainer now *detects*
|
|
19
|
+
reward hacking mid-run and *self-corrects* — instead of only halting. Set
|
|
20
|
+
`training.reward_hack_mitigation` (or `soup train --reward-hack-mitigation`)
|
|
21
|
+
to one of four modes on a GRPO/PPO run (requires `reward_hack_detector`):
|
|
22
|
+
- `log_only` — instrument only: append a per-step `mitigation_log.jsonl`
|
|
23
|
+
(drop_pct, verdict, reward mean/std, completion-length trend, repetition)
|
|
24
|
+
and *never* touch training.
|
|
25
|
+
- `kl_control` — a reversible **bang-bang + hysteresis** controller: when the
|
|
26
|
+
hacking signal trips, raise the KL coefficient β (geometric, clamped to
|
|
27
|
+
`[floor, ceil]`, never crossing 0); relax it when the signal recovers.
|
|
28
|
+
Dwell + release-patience prevent flapping; a multi-signal vote combines the
|
|
29
|
+
detector drop with a length-trend and repetition signal.
|
|
30
|
+
- `pid_lagrangian` — a **PID-Lagrangian** controller (Stooke et al.) that
|
|
31
|
+
holds the hacking signal at a target, plus an **escalation ladder**:
|
|
32
|
+
raise β → roll back to the last-good RL checkpoint → early-stop.
|
|
33
|
+
- Anti-gaming hardening: per-signal EMA/median smoothing,
|
|
34
|
+
conservative-on-disagreement voting, a reward-distribution-drift guard, and
|
|
35
|
+
optional bounded **reward shaping** on the gamed proxy (length / repetition
|
|
36
|
+
/ sentinel). A plain-English give-up explanation is logged on early-stop.
|
|
37
|
+
- **Proof-of-mechanism only** (see Known Limitations): validated on
|
|
38
|
+
SmolLM2-135M + a synthetic length-hacking task on a single RTX 3050 — all
|
|
39
|
+
four stages pass live, including a real mid-run rollback. PPO ships **BETA**
|
|
40
|
+
(mechanism unit-tested; the on-GPU proof is GRPO-only).
|
|
41
|
+
- Ready-made `qwen2.5-coder-7b-sft` recipe for `Qwen/Qwen2.5-Coder-7B-Instruct`
|
|
42
|
+
(catalog 133 → 134)
|
|
43
|
+
([#285](https://github.com/MakazhanAlpamys/Soup/pull/285) by [@Deadpool2000](https://github.com/Deadpool2000)).
|
|
44
|
+
|
|
45
|
+
### Security
|
|
46
|
+
- `RLCheckpointCallback.restore_checkpoint` / `save_checkpoint` refuse a
|
|
47
|
+
**symlinked** `optimizer.pt` — `torch.load(weights_only=False)` on an
|
|
48
|
+
attacker-placed symlink in a shared checkpoint dir was an RCE vector.
|
|
49
|
+
- Bool-before-int/float guards on every new `reward_hack_*` numeric field;
|
|
50
|
+
`reward_hack_signals` bounded (`max_length=4`); the mitigation log writer is
|
|
51
|
+
cwd-contained with symlink-reject-on-rotate and secret redaction.
|
|
52
|
+
|
|
53
|
+
## [0.71.25] - 2026-06-27
|
|
54
|
+
|
|
55
|
+
### Added
|
|
56
|
+
- **`soup ship` — the SHIP / DON'T-SHIP verdict.** After fine-tuning, answer one
|
|
57
|
+
question: did the model get better, or did I break it? `soup ship` fuses two
|
|
58
|
+
checks into a single binary decision — **leg 1**: the task metric *strictly*
|
|
59
|
+
improved (base → tuned); AND **leg 2**: no general benchmark regressed past a
|
|
60
|
+
forgetting threshold (default 0.05 absolute points). It SHIPs only when both
|
|
61
|
+
hold — otherwise DON'T SHIP, *even if the task metric looks great*. The output
|
|
62
|
+
is a one-screen verdict + the reason, with CI-gateable exit codes
|
|
63
|
+
(0 = SHIP, 2 = DON'T SHIP, 1 = runtime error).
|
|
64
|
+
- Leg-1 modes: `--task-mode metric` (eval accuracy) or `judge_score`
|
|
65
|
+
(LLM-as-a-judge); pairwise win-rate is planned for a later release.
|
|
66
|
+
- Leg-2 suite: built-in mini benchmarks by default (offline, CPU), or
|
|
67
|
+
`--general-suite <names>` to route lm-eval benchmarks; `--baseline
|
|
68
|
+
registry://… | file.json` supplies recorded base scores.
|
|
69
|
+
- `--evidence ev.json` decides offline from pre-computed scores (no model
|
|
70
|
+
load); `--output verdict.json` persists the machine-readable verdict.
|
|
71
|
+
- Friendlier error messages: the CUDA-OOM hint now also suggests
|
|
72
|
+
`gradient_checkpointing` and `4bit` quantization, plus new mappings for
|
|
73
|
+
Hugging Face gated repos (`huggingface-cli login` / `HF_TOKEN`) and
|
|
74
|
+
`trust_remote_code` errors. Closes #272
|
|
75
|
+
([#282](https://github.com/MakazhanAlpamys/Soup/pull/282) by [@Akshaya-reddy18](https://github.com/Akshaya-reddy18)).
|
|
76
|
+
|
|
77
|
+
### Security
|
|
78
|
+
- `soup ship` input hardening: `--evidence` is opened with `O_NOFOLLOW` + an
|
|
79
|
+
fstat size cap (16 MiB) under cwd containment; `--task-eval` is cwd-contained
|
|
80
|
+
and symlink-rejected; `--judge-model` is validated by scheme/host via
|
|
81
|
+
`urlparse` (blocks the `http://localhost.attacker.com` prefix bypass);
|
|
82
|
+
lm-eval model ids reject `,`/`=` injection; `--general-suite` is bounded
|
|
83
|
+
(≤ 50 names, ≤ 256 chars each).
|
|
84
|
+
|
|
15
85
|
## [0.71.24] - 2026-06-21
|
|
16
86
|
|
|
17
87
|
### 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 (134 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
|
|
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
|
|
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 (298 files, 14788 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 (297 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.
|
|
@@ -25,6 +25,7 @@ Listed by first contribution. PR numbers link the work.
|
|
|
25
25
|
- Happy-path + CPU-warning tests for `soup bench` ([#31](https://github.com/MakazhanAlpamys/Soup/pull/31))
|
|
26
26
|
- `soup cost` — cloud GPU training cost estimation ([#42](https://github.com/MakazhanAlpamys/Soup/pull/42))
|
|
27
27
|
- `--nccl` flag for `soup doctor` multi-GPU bandwidth checks ([#178](https://github.com/MakazhanAlpamys/Soup/pull/178))
|
|
28
|
+
- Ready-made `qwen2.5-coder-7b-sft` recipe ([#285](https://github.com/MakazhanAlpamys/Soup/pull/285))
|
|
28
29
|
- **Chinmaya Sahu** ([@csking101](https://github.com/csking101))
|
|
29
30
|
- DPO example config, sample data, and tests ([#48](https://github.com/MakazhanAlpamys/Soup/pull/48))
|
|
30
31
|
- FP8 `rowwise` + `rowwise_with_gw_hp` scaling recipes ([#62](https://github.com/MakazhanAlpamys/Soup/pull/62))
|
|
@@ -41,6 +42,8 @@ Listed by first contribution. PR numbers link the work.
|
|
|
41
42
|
- `--energy` flag for `soup bom emit` — thread energy/CO₂ into the ML-BOM ([#256](https://github.com/MakazhanAlpamys/Soup/pull/256))
|
|
42
43
|
- **shatakshi-1404** ([@shatakshi-1404](https://github.com/shatakshi-1404))
|
|
43
44
|
- Unit tests for the `warmup.py` auto-warmup-steps helper ([#274](https://github.com/MakazhanAlpamys/Soup/pull/274))
|
|
45
|
+
- **Kondamwar Akshaya Shrikant** ([@Akshaya-reddy18](https://github.com/Akshaya-reddy18))
|
|
46
|
+
- Friendlier error messages — richer CUDA-OOM hint + Hugging Face gated-repo and `trust_remote_code` mappings + tests ([#282](https://github.com/MakazhanAlpamys/Soup/pull/282))
|
|
44
47
|
|
|
45
48
|
---
|
|
46
49
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: soup-cli
|
|
3
|
-
Version: 0.71.
|
|
3
|
+
Version: 0.71.26
|
|
4
4
|
Summary: Fine-tune and post-train LLMs in one command. No SSH, no config hell.
|
|
5
5
|
Project-URL: Homepage, https://github.com/MakazhanAlpamys/Soup
|
|
6
6
|
Project-URL: Repository, https://github.com/MakazhanAlpamys/Soup
|
|
@@ -189,17 +189,22 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
189
189
|
|
|
190
190
|
## What's New
|
|
191
191
|
|
|
192
|
-
**v0.71.
|
|
192
|
+
**v0.71.26 — Closed-loop reward-hacking auto-mitigation.** Your GRPO/PPO trainer now *detects* reward hacking mid-run and *self-corrects* — instead of only halting. No OSS RLHF library closes this loop.
|
|
193
193
|
|
|
194
|
-
- **
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
- **
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
- **
|
|
201
|
-
|
|
202
|
-
|
|
194
|
+
- **Detect → correct → continue.** When the hacking signal trips, the controller raises the
|
|
195
|
+
KL coefficient β (bang-bang + hysteresis, or a PID-Lagrangian controller), and — if hacking
|
|
196
|
+
persists — **rolls back to the last-good checkpoint**, then early-stops as a last resort.
|
|
197
|
+
- **Anti-gaming hardening.** Multi-signal voting (RM cluster-separation + length-trend +
|
|
198
|
+
repetition), signal smoothing, conservative-on-disagreement, a reward-distribution-drift
|
|
199
|
+
guard, and optional bounded **reward shaping** on the gamed proxy.
|
|
200
|
+
- **Observe first.** `reward_hack_mitigation=log_only` streams a per-step `mitigation_log.jsonl`
|
|
201
|
+
and never touches training — see the hacking happen before you let the controller act.
|
|
202
|
+
- **Honest scope.** Proof-of-mechanism on SmolLM2-135M + a synthetic hacking task on one RTX
|
|
203
|
+
3050 (all four stages validated live, including a real rollback). PPO ships BETA.
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
soup train --config grpo.yaml --reward-hack-mitigation kl_control # detect → raise KL → recover
|
|
207
|
+
```
|
|
203
208
|
|
|
204
209
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
205
210
|
|
|
@@ -385,6 +390,13 @@ pre-commit install # optional: ruff lint+format on commit
|
|
|
385
390
|
See [CONTRIBUTING.md](CONTRIBUTING.md) for the full workflow and [SECURITY.md](SECURITY.md) to
|
|
386
391
|
report a vulnerability.
|
|
387
392
|
|
|
393
|
+
## Contributors
|
|
394
|
+
|
|
395
|
+
Built by the community ❤️ — thank you to everyone who has contributed. See
|
|
396
|
+
[CONTRIBUTORS.md](CONTRIBUTORS.md).
|
|
397
|
+
|
|
398
|
+
[](https://github.com/MakazhanAlpamys/Soup/graphs/contributors)
|
|
399
|
+
|
|
388
400
|
## License
|
|
389
401
|
|
|
390
402
|
[Apache-2.0](LICENSE). Copyright © the Soup contributors.
|
|
@@ -49,17 +49,22 @@ 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
|
-
|
|
52
|
+
**v0.71.26 — Closed-loop reward-hacking auto-mitigation.** Your GRPO/PPO trainer now *detects* reward hacking mid-run and *self-corrects* — instead of only halting. No OSS RLHF library closes this loop.
|
|
53
|
+
|
|
54
|
+
- **Detect → correct → continue.** When the hacking signal trips, the controller raises the
|
|
55
|
+
KL coefficient β (bang-bang + hysteresis, or a PID-Lagrangian controller), and — if hacking
|
|
56
|
+
persists — **rolls back to the last-good checkpoint**, then early-stops as a last resort.
|
|
57
|
+
- **Anti-gaming hardening.** Multi-signal voting (RM cluster-separation + length-trend +
|
|
58
|
+
repetition), signal smoothing, conservative-on-disagreement, a reward-distribution-drift
|
|
59
|
+
guard, and optional bounded **reward shaping** on the gamed proxy.
|
|
60
|
+
- **Observe first.** `reward_hack_mitigation=log_only` streams a per-step `mitigation_log.jsonl`
|
|
61
|
+
and never touches training — see the hacking happen before you let the controller act.
|
|
62
|
+
- **Honest scope.** Proof-of-mechanism on SmolLM2-135M + a synthetic hacking task on one RTX
|
|
63
|
+
3050 (all four stages validated live, including a real rollback). PPO ships BETA.
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
soup train --config grpo.yaml --reward-hack-mitigation kl_control # detect → raise KL → recover
|
|
67
|
+
```
|
|
63
68
|
|
|
64
69
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
65
70
|
|
|
@@ -245,6 +250,13 @@ pre-commit install # optional: ruff lint+format on commit
|
|
|
245
250
|
See [CONTRIBUTING.md](CONTRIBUTING.md) for the full workflow and [SECURITY.md](SECURITY.md) to
|
|
246
251
|
report a vulnerability.
|
|
247
252
|
|
|
253
|
+
## Contributors
|
|
254
|
+
|
|
255
|
+
Built by the community ❤️ — thank you to everyone who has contributed. See
|
|
256
|
+
[CONTRIBUTORS.md](CONTRIBUTORS.md).
|
|
257
|
+
|
|
258
|
+
[](https://github.com/MakazhanAlpamys/Soup/graphs/contributors)
|
|
259
|
+
|
|
248
260
|
## License
|
|
249
261
|
|
|
250
262
|
[Apache-2.0](LICENSE). Copyright © the Soup contributors.
|
|
@@ -11,7 +11,7 @@ feature reference — every `soup` capability, grouped by area.
|
|
|
11
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 |
|
|
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
|
-
| [Evaluation & probes](evaluation.md) | Eval design/gate, eval-gated training, benchmarks, NLG metrics, calibration, Elo arena, diagnose, post-train X-ray probes, A/B, drift, tunability, `soup advise` |
|
|
14
|
+
| [Evaluation & probes](evaluation.md) | Eval design/gate, eval-gated training, benchmarks, NLG metrics, calibration, Elo arena, diagnose, `soup ship` verdict, post-train X-ray probes, A/B, drift, tunability, `soup advise` |
|
|
15
15
|
| [Serving & export](serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding, deploy autopilot, Web UI, Agent Forge |
|
|
16
16
|
| [Adapters, registry & governance](adapters-and-governance.md) | Adapter lifecycle/management, model registry, Soup Cans, the data flywheel (`soup loop`), knowledge editing, steering, supply-chain controls |
|
|
17
17
|
| [Backends, platform & ops](backends-and-ops.md) | MLX/Unsloth backends, Modal cloud GPU training, alternative hubs, HF Hub integration, autopilot, experiment tracking, plan/apply, env lockfiles, hardware-fit, completions, plugins, utility commands |
|
|
@@ -129,7 +129,7 @@ soup migrate --from llamafactory config.yaml Import config from LLaMA-Factory
|
|
|
129
129
|
soup migrate --from axolotl config.yml Import config from Axolotl
|
|
130
130
|
soup migrate --from unsloth notebook.ipynb Import config from Unsloth notebook
|
|
131
131
|
soup migrate --from llamafactory c.yaml --dry-run Preview without writing
|
|
132
|
-
soup recipes list List all
|
|
132
|
+
soup recipes list List all 134 ready-made recipes
|
|
133
133
|
soup recipes show llama3.1-8b-sft Print recipe YAML
|
|
134
134
|
soup recipes use llama3.1-8b-sft Copy recipe to soup.yaml
|
|
135
135
|
soup recipes search "reasoning" Search by keyword/task/size
|
|
@@ -148,6 +148,10 @@ soup runs show <run_id> Run details + loss graph + cost
|
|
|
148
148
|
soup runs compare <run_1> <run_2> Compare two runs
|
|
149
149
|
soup runs replay <run_id> Replay summary + loss curve from history (also plots a benchmark-score curve when the metric lives in eval_results)
|
|
150
150
|
soup why [run_id] Explain training anomalies (heuristic)
|
|
151
|
+
soup ship --base <m> --adapter <lora> --task-eval t.jsonl SHIP / DON'T-SHIP verdict: task win AND no forgetting (exit 0=SHIP / 2=DON'T / 1=error) (v0.71.25)
|
|
152
|
+
soup ship --evidence ev.json [--output v.json] Decide offline from pre-computed scores (no model load)
|
|
153
|
+
soup ship ... --task-mode judge_score --judge-model ollama://llama3.1 Leg-1 via LLM-as-a-judge
|
|
154
|
+
soup ship ... --general-suite mmlu,gsm8k --baseline base.json lm-eval leg-2 + recorded base scores
|
|
151
155
|
soup tui Full-screen Textual dashboard (requires [tui] extra)
|
|
152
156
|
soup train --config soup.yaml --profile Record torch.profiler trace to <output>/profiles/
|
|
153
157
|
soup --log-level quiet|normal|verbose|debug Global logging tier (Rich-formatted)
|
|
@@ -241,6 +245,7 @@ soup data persona-mix --prompts <jsonl> --n N --output <jsonl> Persona-Hub dive
|
|
|
241
245
|
soup data brain-rot <data.jsonl> [--strict] Brain-rot detector — arXiv 2510.13928 (v0.69.0)
|
|
242
246
|
soup iterative-dpo --base-model <m> --reward-model <rm> --prompts <p.jsonl> --output-dir <out> --rounds N --pairs-per-round N [--plan-only] Iterative DPO loop driver — LIVE sample→score→pair→train (v0.70.0; live v0.71.11)
|
|
243
247
|
soup train --reward-hack-detector info_rm|rm_ensemble [--reward-hack-halt] Reward-hacking detector for GRPO — LIVE callback (v0.70.0; live v0.71.11)
|
|
248
|
+
soup train --reward-hack-mitigation off|log_only|kl_control|pid_lagrangian Closed-loop reward-hacking auto-mitigation (detect → raise KL/β → rollback → early-stop); GRPO/PPO, requires --reward-hack-detector; PPO BETA (v0.71.26)
|
|
244
249
|
soup train --uld-strategy wasserstein|topk_align [--uld-top-k N] Cross-tokenizer ULD on task='distill' — LIVE W1/topk loss (v0.70.0; live v0.71.11)
|
|
245
250
|
soup train --minillm-enabled [--minillm-teacher-mix-ratio 0.3] MiniLLM reverse-KL distillation — LIVE (v0.70.0; live v0.71.11)
|
|
246
251
|
soup train --rl-checkpoint-save-every-steps N [--rl-checkpoint-keep-last N] Mid-epoch checkpoint for GRPO/PPO — LIVE (v0.70.0; live v0.71.11)
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
- [Sequential A/B Harness (`soup ab`)](#sequential-ab-harness-soup-ab)
|
|
15
15
|
- [Drift Alarm (`soup drift-alarm`)](#drift-alarm-soup-drift-alarm)
|
|
16
16
|
- [Diagnose (Post-Training Report Card)](#diagnose-post-training-report-card)
|
|
17
|
+
- [Ship Verdict (`soup ship`)](#ship-verdict-soup-ship)
|
|
17
18
|
- [NLG Evaluation Metrics (BLEU + ROUGE)](#nlg-evaluation-metrics-bleu--rouge)
|
|
18
19
|
- [Quant Calibration (KL Divergence)](#quant-calibration-kl-divergence)
|
|
19
20
|
- [Model Arena (Elo Tournament)](#model-arena-elo-tournament)
|
|
@@ -301,6 +302,61 @@ a built-in probe set; `format` only fires when the dataset's own targets look li
|
|
|
301
302
|
**Post-training gate:** `soup train --diagnose-gate <evidence.json>` runs the same scorer after training finishes and refuses to mark the run successful when any mode comes back MAJOR. Composes with `--gate <eval-suite>` (v0.26) — the eval gate catches accuracy regressions vs a baseline; the diagnose gate catches behaviour regressions the eval suite is blind to.
|
|
302
303
|
|
|
303
304
|
|
|
305
|
+
## Ship Verdict (`soup ship`)
|
|
306
|
+
|
|
307
|
+
After fine-tuning, `soup ship` answers one question — did the model get better, or did I
|
|
308
|
+
break it? — as a single binary **SHIP / DON'T SHIP** plus a one-screen reason. It fuses two
|
|
309
|
+
legs into one decision:
|
|
310
|
+
|
|
311
|
+
- **Leg 1 (task win):** the task metric *strictly* improved, base → tuned.
|
|
312
|
+
- **Leg 2 (the moat):** *no* general benchmark regressed past the forgetting threshold
|
|
313
|
+
(default `0.05` **absolute** points — same semantics as `EvalGateConfig.regression_threshold`).
|
|
314
|
+
|
|
315
|
+
```
|
|
316
|
+
SHIP ⇔ task_tuned > task_base AND ∀ benchmark: base − tuned ≤ forgetting_threshold
|
|
317
|
+
else DON'T SHIP — even if the task metric looks great.
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
Exit codes are CI-gateable: **0 = SHIP, 2 = DON'T SHIP, 1 = runtime error**. A tie on leg 1, a
|
|
321
|
+
single regressed benchmark, or a missing baseline all yield DON'T SHIP (a missing baseline
|
|
322
|
+
*refuses* rather than silently shipping).
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
# Live: base vs a LoRA adapter, metric leg + default mini benchmarks
|
|
326
|
+
soup ship --base HuggingFaceTB/SmolLM2-135M-Instruct --adapter ./out \
|
|
327
|
+
--task-eval tasks.jsonl --device cuda
|
|
328
|
+
|
|
329
|
+
# Leg-1 via LLM-as-a-judge instead of an accuracy metric
|
|
330
|
+
soup ship --base <m> --adapter ./out --task-eval tasks.jsonl \
|
|
331
|
+
--task-mode judge_score --judge-model ollama://llama3.1
|
|
332
|
+
|
|
333
|
+
# Leg-2 via lm-eval benchmarks, base scores supplied by --baseline
|
|
334
|
+
soup ship --base <m> --tuned ./out --task-eval tasks.jsonl \
|
|
335
|
+
--general-suite mmlu,hellaswag --baseline registry://abc123
|
|
336
|
+
|
|
337
|
+
# Offline: decide from pre-computed scores, persist the verdict JSON
|
|
338
|
+
soup ship --evidence evidence.json --output verdict.json
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
**`--evidence` shape** (no model load — the offline / CI path):
|
|
342
|
+
|
|
343
|
+
```json
|
|
344
|
+
{
|
|
345
|
+
"task": {"mode": "metric", "base": 0.40, "tuned": 0.55},
|
|
346
|
+
"benchmarks": {
|
|
347
|
+
"mini_mmlu": {"base": 0.80, "tuned": 0.79},
|
|
348
|
+
"mini_common_sense": {"base": 0.60, "tuned": 0.62}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
Leg-2 defaults to the built-in mini benchmarks (`mini_mmlu` / `mini_common_sense` /
|
|
354
|
+
`mini_instruction`) — offline, CPU, instant. `--general-suite <names>` with non-mini names
|
|
355
|
+
routes through the lm-eval harness. Pairwise judge win-rate (`--task-mode pairwise`) is planned
|
|
356
|
+
for a later release. The engine lives in `soup_cli.utils.ship_verdict` (`decide_ship` is a pure
|
|
357
|
+
function — the whole truth table is CPU-testable).
|
|
358
|
+
|
|
359
|
+
|
|
304
360
|
## NLG Evaluation Metrics (BLEU + ROUGE)
|
|
305
361
|
|
|
306
362
|
Pure-Python BLEU + ROUGE-1 / ROUGE-2 / ROUGE-L for `soup eval custom`:
|
|
@@ -418,7 +418,7 @@ soup ui
|
|
|
418
418
|
|
|
419
419
|
**Pages:**
|
|
420
420
|
- **Dashboard** — view all experiment runs, loss charts, system info, multi-run comparison
|
|
421
|
-
- **New Training** — create configs from templates or
|
|
421
|
+
- **New Training** — create configs from templates or 134 ready-made recipes, validate, start training with live SSE log streaming and progress bar
|
|
422
422
|
- **Data Explorer** — browse and inspect datasets (JSONL, JSON, CSV, Parquet)
|
|
423
423
|
- **Model Chat** — chat with streaming responses, configurable temperature/top_p/max_tokens, system prompt, adapter selection, markdown rendering, chat export
|
|
424
424
|
|
|
@@ -427,7 +427,7 @@ soup ui
|
|
|
427
427
|
- **Enhanced Metrics** — 2x2 chart grid (loss, LR, grad_norm, throughput) + GPU memory chart, eval results table
|
|
428
428
|
- **Multi-Run Compare** — overlay loss curves from up to 5 runs side-by-side
|
|
429
429
|
- **Chat Upgrade** — SSE streaming via proxy, typing indicator, cancel button, markdown renderer (bold, italic, code blocks), chat export as JSON
|
|
430
|
-
- **Config Builder** — recipe dropdown (
|
|
430
|
+
- **Config Builder** — recipe dropdown (134 recipes), config schema API for dynamic form generation
|
|
431
431
|
|
|
432
432
|
**Security:** The Web UI generates a random auth token at startup (printed to console). All mutating endpoints (start/stop training, delete runs, inspect data, validate config) require `Authorization: Bearer <token>` header. CORS is restricted to the served origin. Data inspection is sandboxed to the working directory.
|
|
433
433
|
|
|
@@ -50,6 +50,10 @@ Six surfaces protect the training loop from the failure modes that cost a real G
|
|
|
50
50
|
soup train --config soup.yaml \
|
|
51
51
|
--reward-hack-detector info_rm --reward-hack-halt # halt on HACK verdict
|
|
52
52
|
|
|
53
|
+
# Closed-loop reward-hacking MITIGATION (v0.71.26) — detect AND self-correct
|
|
54
|
+
soup train --config grpo.yaml --reward-hack-mitigation kl_control # raise KL, recover
|
|
55
|
+
soup train --config grpo.yaml --reward-hack-mitigation log_only # observe only, no action
|
|
56
|
+
|
|
53
57
|
# Cross-tokenizer distillation — Llama -> Mistral, no shared vocab needed
|
|
54
58
|
# (Universal Logit Distillation, Boizard et al. 2024 arXiv:2402.12030)
|
|
55
59
|
soup train --config soup.yaml --uld-strategy wasserstein
|
|
@@ -100,6 +104,17 @@ soup train --config grpo.yaml \
|
|
|
100
104
|
|
|
101
105
|
`--echo-trap-tokenizer-aware` switches echo-trap n-grams from whitespace tokens to the active tokenizer's integer ids. This catches subword repetition that punctuation-heavy decoded text can hide, but the score becomes tokenizer-specific rather than vocabulary-agnostic.
|
|
102
106
|
|
|
107
|
+
### Closed-loop reward-hacking auto-mitigation (v0.71.26)
|
|
108
|
+
|
|
109
|
+
The detectors above *halt*; `training.reward_hack_mitigation` (or the `--reward-hack-mitigation` flag) makes the trainer *self-correct* mid-run. It requires `reward_hack_detector` on a `grpo`/`ppo` transformers run, and has four modes:
|
|
110
|
+
|
|
111
|
+
- **`log_only`** — observe only. Appends a per-step `mitigation_log.jsonl` under the run's output dir (the InfoRM/ensemble drop, the OK/WARN/HACK verdict, reward mean/std, completion-length trend, repetition) and provably never mutates β. Run this first to *see* hacking before you let a controller act on it.
|
|
112
|
+
- **`kl_control`** — a reversible **bang-bang + hysteresis** controller. When a multi-signal vote (`reward_hack_signals`: the detector drop + `length_trend` + `repetition`) stays above `reward_hack_trip_band` for `reward_hack_dwell_steps`, it multiplies β by `reward_hack_kl_gain` (clamped to `[reward_hack_beta_floor > 0, reward_hack_beta_ceil]`, never crossing 0); after `reward_hack_release_patience` below-band steps it relaxes β back toward the floor. Dwell + release-patience stop it flapping. β is written to **both** `trainer.beta` and `trainer.args.beta` so it takes effect on stock GRPO *and* Soup's GRPO variants (and `trainer.args.kl_coef` on PPO).
|
|
113
|
+
- **`pid_lagrangian`** — a **PID-Lagrangian** controller (Stooke et al. 2020) that holds the hacking signal at `reward_hack_signal_target` (Kp/Ki/Kd with integral anti-windup via `reward_hack_integral_clamp`), plus an **escalation ladder**: raise β → after `reward_hack_rollback_patience` persistent-HACK steps roll back to the last-good RL checkpoint (needs `rl_checkpoint_save_every_steps`) → after `reward_hack_max_recovery_attempts` rollbacks, early-stop with a plain-English give-up explanation.
|
|
114
|
+
- **Anti-gaming hardening** (any control mode): `reward_hack_signal_smoothing` (`ema`/`median` over `reward_hack_smoothing_window`), `reward_hack_conservative_on_disagreement` (when detectors disagree, keep KL high + guard against a bimodal reward-distribution collapse), and `reward_hack_reward_shaping` (subtract a bounded `reward_hack_shaping_strength` penalty on the gamed proxy — `length`/`repetition`/`sentinel` — over the reward-fn seam).
|
|
115
|
+
|
|
116
|
+
**Scope:** proof-of-mechanism only. Validated on SmolLM2-135M + a synthetic length-hacking task on a single RTX 3050 (all four modes live, including a real mid-run rollback). PPO ships **BETA** — the buffer + `kl_coef` mutation are wired and unit-tested, but the on-GPU proof is GRPO-only. Whether the loop suppresses hacking without collapsing true reward on 7B+ with a real reward model is an open, community-validatable question. `reward_hack_mitigation ∈ {kl_control, pid_lagrangian}` is mutually exclusive with `ref_model_ema_alpha` (both drive the KL/ref dynamics).
|
|
117
|
+
|
|
103
118
|
Every detector composes with v0.34 `soup why` (anomaly explainer), v0.32 spike recovery, and the v0.53.11 #127 `GRPOStabilityCallback` so a single GRPO run can have InfoRM + echo-trap + spike-recovery + in-place ref-model EMA all active simultaneously without duplicating trajectory / state collection. The reward-hack and echo-trap callbacks read the per-step rewards through a shared, thread-safe capture buffer (Soup wraps your reward functions so it never has to monkeypatch TRL); `rm_ensemble` needs ≥2 reward functions to compute a divergence. The MiniLLM teacher-mix is an offline distribution-blend analog of the paper's on-policy teacher-mixed *sampling*, and ULD compares the distributions after clamping teacher ids to the teacher vocab (correct for same-family / extended-vocab pairs; a genuinely different tokenization needs a sequence-alignment step). The reference-model EMA (`--ref-model-ema-alpha`) updates in place — no full `state_dict` round-trip — so it is cheap at 70B+ scale.
|
|
104
119
|
|
|
105
120
|
|
|
@@ -402,6 +402,17 @@ output_dir: ./output_advanced/
|
|
|
402
402
|
|
|
403
403
|
See the [config schema](../src/soup_cli/config/schema.py) (the single source of truth) for all available options.
|
|
404
404
|
|
|
405
|
+
## Reward-hacking mitigation demo
|
|
406
|
+
|
|
407
|
+
`reward_hacking/rewards.py` provides synthetic reward functions for the
|
|
408
|
+
closed-loop reward-hacking mitigation feature (`soup train
|
|
409
|
+
--reward-hack-mitigation`): a gameable `length_hack_reward` / `sentinel_reward`
|
|
410
|
+
proxy decoupled from a held-out `true_score`. Point a GRPO config's
|
|
411
|
+
`training.reward_fn` at a `.py` that re-exports one as `reward_fn`, enable
|
|
412
|
+
`reward_hack_detector: info_rm` + `reward_hack_mitigation: kl_control`, and watch
|
|
413
|
+
`mitigation_log.jsonl` under the run's output dir. See
|
|
414
|
+
[docs/training.md](../docs/training.md#closed-loop-reward-hacking-auto-mitigation-v07126).
|
|
415
|
+
|
|
405
416
|
## Learn More
|
|
406
417
|
|
|
407
418
|
- **README**: [Main documentation](../README.md)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"""Synthetic reward-hacking task for the v0.71.26 closed-loop mitigation demo.
|
|
2
|
+
|
|
3
|
+
These reward functions are the reusable GPU-experiment fixture for the
|
|
4
|
+
reward-hacking auto-mitigation controller. They implement a *gameable* proxy
|
|
5
|
+
reward that is deliberately decoupled from a held-out *true* quality score, so
|
|
6
|
+
a policy can visibly "hack" the proxy while the true score stagnates or drops.
|
|
7
|
+
|
|
8
|
+
Use one of the proxies as the training reward and log ``true_score`` alongside
|
|
9
|
+
it to see the divergence:
|
|
10
|
+
|
|
11
|
+
soup train --config examples/reward_hacking/grpo_length_hack.yaml
|
|
12
|
+
|
|
13
|
+
Reward-function signature (TRL GRPO/PPO): ``fn(prompts, completions, **kwargs)
|
|
14
|
+
-> list[float]``. ``completions`` are plain strings (non-conversational) or
|
|
15
|
+
lists of ``{"role", "content"}`` message dicts (conversational).
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from typing import Any
|
|
19
|
+
|
|
20
|
+
# The synthetic "correct answer" the TRUE scorer looks for. Orthogonal to both
|
|
21
|
+
# the length proxy and the sentinel proxy.
|
|
22
|
+
_TARGET_ANSWER = "42"
|
|
23
|
+
# The gameable sentinel token the sentinel proxy pays for.
|
|
24
|
+
_SENTINEL = "GOLD"
|
|
25
|
+
# Length (in whitespace tokens) at which the length proxy saturates.
|
|
26
|
+
_LENGTH_SATURATION = 32.0
|
|
27
|
+
# Above this word count the true scorer considers the answer padded / verbose.
|
|
28
|
+
_CONCISE_MAX_WORDS = 16
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _text(completion: Any) -> str:
|
|
32
|
+
"""Extract assistant text from a string or list-of-message-dicts completion."""
|
|
33
|
+
if isinstance(completion, str):
|
|
34
|
+
return completion
|
|
35
|
+
if isinstance(completion, dict):
|
|
36
|
+
return str(completion.get("content", ""))
|
|
37
|
+
if isinstance(completion, (list, tuple)):
|
|
38
|
+
parts = []
|
|
39
|
+
for item in completion:
|
|
40
|
+
if isinstance(item, dict):
|
|
41
|
+
parts.append(str(item.get("content", "")))
|
|
42
|
+
else:
|
|
43
|
+
parts.append(str(item))
|
|
44
|
+
return "".join(parts)
|
|
45
|
+
return str(completion)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def length_hack_reward(prompts: Any, completions: Any, **kwargs: Any) -> list[float]:
|
|
49
|
+
"""Gameable proxy: reward proportional to completion length (bounded [0, 1]).
|
|
50
|
+
|
|
51
|
+
A policy maximises this by padding output — orthogonal to real quality.
|
|
52
|
+
"""
|
|
53
|
+
return [
|
|
54
|
+
min(1.0, len(_text(comp).split()) / _LENGTH_SATURATION)
|
|
55
|
+
for comp in completions
|
|
56
|
+
]
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def sentinel_reward(prompts: Any, completions: Any, **kwargs: Any) -> list[float]:
|
|
60
|
+
"""Gameable proxy: +1 iff the completion contains the sentinel token."""
|
|
61
|
+
return [1.0 if _SENTINEL in _text(comp) else 0.0 for comp in completions]
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def true_score(prompts: Any, completions: Any, **kwargs: Any) -> list[float]:
|
|
65
|
+
"""Held-out TRUE quality, decoupled from both proxies.
|
|
66
|
+
|
|
67
|
+
Rewards the correct answer token concisely: 1.0 for a concise correct
|
|
68
|
+
answer, 0.3 for a correct-but-verbose answer, 0.0 otherwise. Padding
|
|
69
|
+
(length hack) pushes past the concise limit and spamming the sentinel does
|
|
70
|
+
nothing here — so gaming either proxy does NOT raise the true score.
|
|
71
|
+
"""
|
|
72
|
+
out: list[float] = []
|
|
73
|
+
for comp in completions:
|
|
74
|
+
text = _text(comp)
|
|
75
|
+
has_answer = _TARGET_ANSWER in text
|
|
76
|
+
concise = len(text.split()) <= _CONCISE_MAX_WORDS
|
|
77
|
+
if has_answer and concise:
|
|
78
|
+
out.append(1.0)
|
|
79
|
+
elif has_answer:
|
|
80
|
+
out.append(0.3)
|
|
81
|
+
else:
|
|
82
|
+
out.append(0.0)
|
|
83
|
+
return out
|
|
@@ -233,6 +233,18 @@ app.command(
|
|
|
233
233
|
),
|
|
234
234
|
)(_diagnose_cmd.diagnose)
|
|
235
235
|
|
|
236
|
+
# v0.71.25 — `soup ship` SHIP / DON'T-SHIP verdict engine.
|
|
237
|
+
from soup_cli.commands import ship as _ship_cmd # noqa: E402
|
|
238
|
+
|
|
239
|
+
app.add_typer(
|
|
240
|
+
_ship_cmd.app,
|
|
241
|
+
name="ship",
|
|
242
|
+
help=(
|
|
243
|
+
"SHIP / DON'T SHIP verdict after fine-tuning: task win AND no "
|
|
244
|
+
"catastrophic forgetting, fused into one decision (v0.71.25)."
|
|
245
|
+
),
|
|
246
|
+
)
|
|
247
|
+
|
|
236
248
|
# v0.58.0 — `soup loop` CLI-first data flywheel capstone.
|
|
237
249
|
from soup_cli.commands import loop as _loop_cmd # noqa: E402
|
|
238
250
|
|