soup-cli 0.71.25__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.25 → soup_cli-0.71.26}/CHANGELOG.md +38 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/CONTRIBUTING.md +3 -3
- {soup_cli-0.71.25 → soup_cli-0.71.26}/CONTRIBUTORS.md +1 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/PKG-INFO +13 -12
- {soup_cli-0.71.25 → soup_cli-0.71.26}/README.md +13 -12
- {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/README.md +1 -1
- {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/commands.md +2 -1
- {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/serving-and-export.md +2 -2
- {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/training.md +15 -0
- {soup_cli-0.71.25 → 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.25 → soup_cli-0.71.26}/pyproject.toml +1 -1
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/train.py +77 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/config/schema.py +437 -4
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/monitoring/trace_logger.py +5 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/recipes/catalog.py +29 -1
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/grpo.py +5 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/ppo.py +40 -0
- {soup_cli-0.71.25 → 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.25 → soup_cli-0.71.26}/src/soup_cli/utils/reward_hacking.py +12 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/rl_checkpoint.py +78 -11
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_recipes.py +3 -2
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07124.py +3 -3
- soup_cli-0.71.26/tests/test_v07126.py +2315 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/.dockerignore +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/FUNDING.yml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/pull_request_template.md +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/.gitignore +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/.mailmap +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/AGENTS.md +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/CODEOWNERS +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/Dockerfile +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/LICENSE +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/NOTICE +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/SECURITY.md +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/docker-compose.yml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/adapters-and-governance.md +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/backends-and-ops.md +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/data.md +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/evaluation.md +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/models.md +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/peft-and-efficiency.md +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/docs/performance-and-quantization.md +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/soup.png +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/soup_logo_svg.svg +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cli.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cloud/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/cloud/modal.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/_eval_v0650.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/_eval_v07110.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/adapters.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/advise.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/data.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/diagnose.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/ra_dit.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/serve.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/ship.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/spectrum.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/loader.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/registry/store.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/bitnet.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/mole_routing.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/raft.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/sft.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/tts.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/ui/app.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/advise.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/agent_sandbox.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/citation.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/live.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/edit_kernels.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/harm_probe.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/hubs.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/interference_live.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/live_eval.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/mod.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/probe_kernel.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ra_dit_run.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/raft.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ship_verdict.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/spectrum_scan.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/truth_probe.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/tts_codec.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/unlearn_kernels.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/templates/chat.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/templates/code.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/templates/medical.yaml +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/__init__.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/conftest.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/qa/v07114_qa.md +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_adapters.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_audio.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_autopilot.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_bco.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_bench.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_build_dag.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_callback.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_cans.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_chat.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_chat_template.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_cli.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_config.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_cost.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_curriculum.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_data.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_data_augment.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_data_sample.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_data_split.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_data_tools.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_diff.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_display.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_doctor.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_embedding.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_errors.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_eval.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_export.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_formats.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_generate.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_gpu.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_grpo.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_infer.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_init.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_ipo.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_kto.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_loader.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_log_level.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_merge.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_migrate.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_moe.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_orpo.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_packing.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_part_a_wave1.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_part_d.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_part_e.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_performance.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_ppo.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_pretrain.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_profile.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_profiling.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_progress.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_push.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_qat.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_quant_check.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_quickstart.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_registry.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_relora.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_replay.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_resume.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_rlvr.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_run_cost.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_runs.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_serve.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_server_generate.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_simpo.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_sweep.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_tracker.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_training_speed.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_tui.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_ui.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_unsloth.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0420.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0450.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0490.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0510.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0520.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0530.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v05310.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v05311.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0532.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0533.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0534.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0535.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0536.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0537.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0538.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0539.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0540.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0550.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0560.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0580.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0590.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07110.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07111.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07112.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07113.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07114.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07115.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07116.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07117.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07118.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07119.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0712.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07120.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07121.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07122.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07123.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v07125.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0713.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0714.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0715.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0716.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0717.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0718.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_v0719.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_validator.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_vision.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_warmup.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_why.py +0 -0
- {soup_cli-0.71.25 → soup_cli-0.71.26}/tests/test_windows_encoding.py +0 -0
|
@@ -12,6 +12,44 @@ 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
|
+
|
|
15
53
|
## [0.71.25] - 2026-06-27
|
|
16
54
|
|
|
17
55
|
### 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
|
|
|
@@ -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))
|
|
@@ -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,20 +189,21 @@ 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.
|
|
203
204
|
|
|
204
205
|
```bash
|
|
205
|
-
soup
|
|
206
|
+
soup train --config grpo.yaml --reward-hack-mitigation kl_control # detect → raise KL → recover
|
|
206
207
|
```
|
|
207
208
|
|
|
208
209
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
@@ -49,20 +49,21 @@ 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.
|
|
63
64
|
|
|
64
65
|
```bash
|
|
65
|
-
soup
|
|
66
|
+
soup train --config grpo.yaml --reward-hack-mitigation kl_control # detect → raise KL → recover
|
|
66
67
|
```
|
|
67
68
|
|
|
68
69
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
@@ -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
|
|
@@ -245,6 +245,7 @@ soup data persona-mix --prompts <jsonl> --n N --output <jsonl> Persona-Hub dive
|
|
|
245
245
|
soup data brain-rot <data.jsonl> [--strict] Brain-rot detector — arXiv 2510.13928 (v0.69.0)
|
|
246
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)
|
|
247
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)
|
|
248
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)
|
|
249
250
|
soup train --minillm-enabled [--minillm-teacher-mix-ratio 0.3] MiniLLM reverse-KL distillation — LIVE (v0.70.0; live v0.71.11)
|
|
250
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)
|
|
@@ -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
|
|
@@ -167,6 +167,31 @@ def train(
|
|
|
167
167
|
"training.echo_trap_enabled=true on grpo/ppo."
|
|
168
168
|
),
|
|
169
169
|
),
|
|
170
|
+
reward_hack_detector: str = typer.Option(
|
|
171
|
+
None,
|
|
172
|
+
"--reward-hack-detector",
|
|
173
|
+
help=(
|
|
174
|
+
"Reward-hacking detector for GRPO/PPO: info_rm | rm_ensemble. "
|
|
175
|
+
"Overrides training.reward_hack_detector. (v0.71.26)"
|
|
176
|
+
),
|
|
177
|
+
),
|
|
178
|
+
reward_hack_halt: bool = typer.Option(
|
|
179
|
+
False,
|
|
180
|
+
"--reward-hack-halt",
|
|
181
|
+
help=(
|
|
182
|
+
"Auto-halt training on a HACK verdict. Requires "
|
|
183
|
+
"--reward-hack-detector (or training.reward_hack_detector). (v0.71.26)"
|
|
184
|
+
),
|
|
185
|
+
),
|
|
186
|
+
reward_hack_mitigation: str = typer.Option(
|
|
187
|
+
None,
|
|
188
|
+
"--reward-hack-mitigation",
|
|
189
|
+
help=(
|
|
190
|
+
"Closed-loop reward-hacking mitigation mode: off | log_only | "
|
|
191
|
+
"kl_control | pid_lagrangian. Requires training.reward_hack_detector "
|
|
192
|
+
"on grpo/ppo. Overrides training.reward_hack_mitigation. (v0.71.26)"
|
|
193
|
+
),
|
|
194
|
+
),
|
|
170
195
|
minillm_on_policy: bool = typer.Option(
|
|
171
196
|
False,
|
|
172
197
|
"--minillm-on-policy",
|
|
@@ -344,6 +369,48 @@ def train(
|
|
|
344
369
|
cfg.training.echo_trap_tokenizer_aware = True
|
|
345
370
|
console.print("[green]Echo-trap tokenizer-aware scoring enabled[/]")
|
|
346
371
|
|
|
372
|
+
# --- Reward-hack detector / halt shortcut (v0.71.26) ---
|
|
373
|
+
if reward_hack_detector is not None:
|
|
374
|
+
if reward_hack_detector not in ("info_rm", "rm_ensemble"):
|
|
375
|
+
console.print(
|
|
376
|
+
"[red]--reward-hack-detector must be info_rm or rm_ensemble[/]"
|
|
377
|
+
)
|
|
378
|
+
raise typer.Exit(1)
|
|
379
|
+
cfg.training.reward_hack_detector = reward_hack_detector
|
|
380
|
+
console.print(f"[green]Reward-hack detector:[/] {reward_hack_detector}")
|
|
381
|
+
if reward_hack_halt:
|
|
382
|
+
if cfg.training.reward_hack_detector is None:
|
|
383
|
+
console.print(
|
|
384
|
+
"[red]--reward-hack-halt requires --reward-hack-detector "
|
|
385
|
+
"(or training.reward_hack_detector)[/]"
|
|
386
|
+
)
|
|
387
|
+
raise typer.Exit(1)
|
|
388
|
+
cfg.training.reward_hack_halt = True
|
|
389
|
+
console.print("[green]Reward-hack auto-halt enabled[/]")
|
|
390
|
+
|
|
391
|
+
# --- Reward-hack mitigation shortcut (v0.71.26) ---
|
|
392
|
+
if reward_hack_mitigation is not None:
|
|
393
|
+
valid_modes = ("off", "log_only", "kl_control", "pid_lagrangian")
|
|
394
|
+
if reward_hack_mitigation not in valid_modes:
|
|
395
|
+
console.print(
|
|
396
|
+
"[red]--reward-hack-mitigation must be one of "
|
|
397
|
+
f"{', '.join(valid_modes)}[/]"
|
|
398
|
+
)
|
|
399
|
+
raise typer.Exit(1)
|
|
400
|
+
if (
|
|
401
|
+
reward_hack_mitigation != "off"
|
|
402
|
+
and cfg.training.reward_hack_detector is None
|
|
403
|
+
):
|
|
404
|
+
console.print(
|
|
405
|
+
"[red]--reward-hack-mitigation requires "
|
|
406
|
+
"training.reward_hack_detector to be set (the signal source)[/]"
|
|
407
|
+
)
|
|
408
|
+
raise typer.Exit(1)
|
|
409
|
+
cfg.training.reward_hack_mitigation = reward_hack_mitigation
|
|
410
|
+
console.print(
|
|
411
|
+
f"[green]Reward-hack mitigation:[/] {reward_hack_mitigation}"
|
|
412
|
+
)
|
|
413
|
+
|
|
347
414
|
# --- MiniLLM on-policy rollout shortcut (v0.71.18 #257) ---
|
|
348
415
|
if minillm_on_policy:
|
|
349
416
|
if not cfg.training.minillm_enabled:
|
|
@@ -618,6 +685,16 @@ def train(
|
|
|
618
685
|
script_args.append("--tensorboard")
|
|
619
686
|
if echo_trap_tokenizer_aware:
|
|
620
687
|
script_args.append("--echo-trap-tokenizer-aware")
|
|
688
|
+
if reward_hack_detector is not None:
|
|
689
|
+
script_args.extend(
|
|
690
|
+
["--reward-hack-detector", reward_hack_detector]
|
|
691
|
+
)
|
|
692
|
+
if reward_hack_halt:
|
|
693
|
+
script_args.append("--reward-hack-halt")
|
|
694
|
+
if reward_hack_mitigation is not None:
|
|
695
|
+
script_args.extend(
|
|
696
|
+
["--reward-hack-mitigation", reward_hack_mitigation]
|
|
697
|
+
)
|
|
621
698
|
if yes:
|
|
622
699
|
script_args.append("--yes")
|
|
623
700
|
argv = build_accelerate_argv(
|