soup-cli 0.71.40__tar.gz → 0.72.0__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.40 → soup_cli-0.72.0}/CHANGELOG.md +95 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/CONTRIBUTING.md +3 -3
- {soup_cli-0.71.40 → soup_cli-0.72.0}/PKG-INFO +34 -17
- {soup_cli-0.71.40 → soup_cli-0.72.0}/README.md +34 -17
- {soup_cli-0.71.40 → soup_cli-0.72.0}/SECURITY.md +2 -2
- {soup_cli-0.71.40 → soup_cli-0.72.0}/docs/README.md +2 -2
- {soup_cli-0.71.40 → soup_cli-0.72.0}/docs/backends-and-ops.md +2 -8
- {soup_cli-0.71.40 → soup_cli-0.72.0}/docs/commands.md +5 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/docs/performance-and-quantization.md +103 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/docs/training.md +30 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/pyproject.toml +1 -1
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/adapters.py +76 -14
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/reward.py +130 -2
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/train.py +19 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/config/schema.py +167 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/monitoring/hf_push.py +24 -6
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/recipes/catalog.py +6 -4
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/sft.py +240 -1
- soup_cli-0.72.0/src/soup_cli/utils/adapter_arithmetic.py +609 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/adapter_merge.py +13 -0
- soup_cli-0.72.0/src/soup_cli/utils/layer_shard.py +392 -0
- soup_cli-0.72.0/src/soup_cli/utils/layer_stream.py +350 -0
- soup_cli-0.72.0/src/soup_cli/utils/layer_stream_runtime.py +609 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/relora.py +24 -5
- soup_cli-0.72.0/src/soup_cli/utils/reward_stress.py +190 -0
- soup_cli-0.72.0/tests/test_issue300_online_dpo_train.py +144 -0
- soup_cli-0.72.0/tests/test_issue302_vision_pad_token.py +214 -0
- soup_cli-0.72.0/tests/test_issue305_mixed_rank_arithmetic.py +595 -0
- soup_cli-0.72.0/tests/test_issue308_callback_subclass.py +189 -0
- soup_cli-0.72.0/tests/test_v07141.py +423 -0
- soup_cli-0.72.0/tests/test_v07200.py +2160 -0
- soup_cli-0.71.40/src/soup_cli/utils/adapter_arithmetic.py +0 -288
- {soup_cli-0.71.40 → soup_cli-0.72.0}/.dockerignore +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/.github/FUNDING.yml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/.github/pull_request_template.md +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/.gitignore +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/.mailmap +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/AGENTS.md +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/CODEOWNERS +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/CONTRIBUTORS.md +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/Dockerfile +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/LICENSE +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/NOTICE +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/docker-compose.yml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/docs/adapters-and-governance.md +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/docs/compliance.md +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/docs/data.md +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/docs/evaluation.md +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/docs/models.md +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/docs/peft-and-efficiency.md +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/docs/serving-and-export.md +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/examples/README.md +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/examples/reward_hacking/rewards.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/soup.png +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/soup_logo_svg.svg +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/cli.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/cloud/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/cloud/modal.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/_eval_v0650.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/_eval_v07110.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/advise.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/card.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/ci.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/data.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/data_canary.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/data_doctor.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/data_topics.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/diagnose.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/draft.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/mcp.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/ra_dit.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/serve.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/ship.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/shrink.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/spectrum.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/_fixtures/gate/format_json.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/_fixtures/gate/safety.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/_fixtures/gate/tool_call.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/loader.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/envs/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/envs/_common.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/envs/calculator.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/envs/guess_number.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/envs/retrieval_qa.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/eval/gate_suites.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/mcp_server/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/mcp_server/registry.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/mcp_server/server.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/registry/store.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/eu-ai-act.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/hipaa.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/soc2.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/sr-11-7.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/asr.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/bitnet.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/grpo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/mole_routing.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/online_dpo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/ppo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/raft.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/tts.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/ui/app.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/adapter_fuse.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/advise.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/agent_sandbox.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/asr_metrics.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/best_of_n.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/canary.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/ci_workflow.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/data_doctor.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/data_lint.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/diagnose/citation.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/diagnose/live.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/draft.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/edit_kernels.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/embed.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/evolve.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/harm_probe.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/hubs.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/interference_live.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/lisa.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/live_eval.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/mod.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/peft_wiring.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/prm_reward.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/probe_kernel.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/ra_dit_run.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/raft.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/rehearsal.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/reward_hack_control.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/reward_synth.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/rl_checkpoint.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/semdedup.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/ship_verdict.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/shrink.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/spectrum_scan.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/topics.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/truth_probe.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/tts_codec.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/unlearn_kernels.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/templates/chat.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/templates/code.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/templates/medical.yaml +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/__init__.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/conftest.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/qa/v07114_qa.md +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_adapters.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_audio.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_autopilot.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_bco.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_bench.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_build_dag.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_callback.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_cans.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_chat.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_chat_template.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_cli.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_code_review_critical.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_code_review_deferred.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_code_review_high.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_code_review_medium_low.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_code_review_recurring.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_config.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_cost.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_curriculum.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_data.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_data_augment.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_data_sample.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_data_split.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_data_tools.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_diff.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_display.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_doctor.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_embedding.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_errors.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_eval.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_export.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_formats.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_generate.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_gpu.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_grpo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_infer.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_init.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_ipo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_kto.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_loader.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_log_level.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_merge.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_migrate.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_moe.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_orpo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_packing.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_part_a_wave1.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_part_d.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_part_e.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_performance.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_ppo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_pretrain.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_profile.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_profiling.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_progress.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_push.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_qat.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_quant_check.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_quickstart.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_recipes.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_registry.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_relora.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_replay.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_resume.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_review_fixes_v07133.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_rlvr.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_run_cost.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_runs.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_serve.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_server_generate.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_simpo.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_sweep.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_tracker.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_training_speed.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_tui.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_ui.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_unsloth.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0420.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0450.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0490.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0510.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0520.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0530.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v05310.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v05311.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0532.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0533.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0534.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0535.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0536.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0537.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0538.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0539.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0540.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0550.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0560.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0580.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0590.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07110.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07111.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07112.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07113.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07114.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07115.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07116.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07117.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07118.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07119.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0712.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07120.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07121.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07122.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07123.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07124.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07125.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07126.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07127.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07128.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07129.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0713.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07130.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07131.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07132.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07133.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07134.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07135.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07136.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07137.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07138.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07139.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0714.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v07140.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0715.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0716.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0717.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0718.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_v0719.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_validator.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_vision.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_warmup.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_why.py +0 -0
- {soup_cli-0.71.40 → soup_cli-0.72.0}/tests/test_windows_encoding.py +0 -0
|
@@ -12,6 +12,101 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.72.0] - 2026-07-26
|
|
16
|
+
|
|
17
|
+
**Layer streaming (BETA) — fine-tune models that don't fit in your card.** The
|
|
18
|
+
frozen base lives in CPU RAM and is streamed into two pre-allocated VRAM buffers
|
|
19
|
+
one decoder layer at a time, so peak VRAM is bounded by the size of *one layer*
|
|
20
|
+
instead of the whole model. Only the LoRA adapters, their gradients and
|
|
21
|
+
optimizer state stay resident. Slower than resident training — but these models
|
|
22
|
+
did not run on the card at all.
|
|
23
|
+
|
|
24
|
+
Measured on the development box (**RTX 3050 Laptop 4 GB**, Windows 11, 16.9 GB
|
|
25
|
+
RAM), batch 1, gradient checkpointing on, 50 steps after 10 warm-up:
|
|
26
|
+
|
|
27
|
+
| Model | S | tok/s | GPU util | Peak VRAM |
|
|
28
|
+
|---|---|---|---|---|
|
|
29
|
+
| Qwen2.5-0.5B | 512 | 978.6 | 91.4% | 1.47 GB |
|
|
30
|
+
| Qwen2.5-1.5B | 512 | 525.0 | 96.8% | 1.82 GB |
|
|
31
|
+
| Qwen2.5-1.5B | 1024 | 487.6 | 96.7% | 2.96 GB |
|
|
32
|
+
| Qwen2.5-3B | 512 | 143.1 | 79.3% | **2.15 GB** |
|
|
33
|
+
|
|
34
|
+
**Qwen2.5-3B trains in 2.15 GB on a 4 GB card where a resident run OOMs.** The
|
|
35
|
+
honest cost: **1.43× slower than resident**, measured at 0.5B — the only
|
|
36
|
+
apples-to-apples comparison available on this box, because 1.5B and above cannot
|
|
37
|
+
run resident here at all.
|
|
38
|
+
|
|
39
|
+
### Added
|
|
40
|
+
|
|
41
|
+
- **`training.stream_layers: true`** — stream the frozen base layer-by-layer
|
|
42
|
+
from CPU RAM. `training.stream_source` (`auto`/`ram`/`disk`) and
|
|
43
|
+
`training.stream_buffers` (2–8, default 2 = double buffering) tune it.
|
|
44
|
+
- `soup_cli/utils/layer_stream.py` — tier choice, pinned-vs-pageable decision,
|
|
45
|
+
architecture allowlist, VRAM/throughput arithmetic (no torch import).
|
|
46
|
+
- `soup_cli/utils/layer_shard.py` — rewrites an HF checkpoint into one
|
|
47
|
+
safetensors shard per decoder layer, one tensor at a time, so sharding a model
|
|
48
|
+
that does not fit never needs it to fit.
|
|
49
|
+
- `soup_cli/utils/layer_stream_runtime.py` — buffer pool, CPU-RAM weight source,
|
|
50
|
+
prefetch scheduler on a dedicated CUDA stream, and the streamed layer wrapper.
|
|
51
|
+
- Shards are cached under `~/.soup/layer-stream/` (override with
|
|
52
|
+
`SOUP_LAYER_STREAM_CACHE_DIR`) and keyed to the source checkpoint's
|
|
53
|
+
fingerprint, so a base retrained in place re-shards instead of silently
|
|
54
|
+
training against stale weights.
|
|
55
|
+
- When the base cannot be page-locked, the RAM store falls back to pageable
|
|
56
|
+
memory **and says so**, including the measured cost (GPU utilisation
|
|
57
|
+
~97% → ~79%).
|
|
58
|
+
|
|
59
|
+
### Changed
|
|
60
|
+
|
|
61
|
+
- The pre-flight hardware-fit gate is skipped for streaming runs: it models a
|
|
62
|
+
resident run and would otherwise refuse exactly the runs streaming enables.
|
|
63
|
+
- Gradient checkpointing is handled per-layer by the streamer; the HF Trainer's
|
|
64
|
+
own is left off so layers are not recomputed twice.
|
|
65
|
+
|
|
66
|
+
### Known limitations
|
|
67
|
+
|
|
68
|
+
- **BETA, and proof-of-mechanism at 3B.** Nothing above 3B was measured. No
|
|
69
|
+
8B/14B claim is supported.
|
|
70
|
+
- Scope: RAM tier, bf16, `task: sft`, Llama/Qwen, batch size 1, no gradient
|
|
71
|
+
accumulation, no `--resume`. Every refusal names the release that lifts it.
|
|
72
|
+
- 4-bit (NF4) streaming is **v0.72.1** — NF4 weights carry a quantisation state
|
|
73
|
+
and cannot be byte-copied into a plain buffer.
|
|
74
|
+
- The disk overflow tier, larger batches, gradient accumulation and
|
|
75
|
+
checkpoint/resume are **v0.72.2**.
|
|
76
|
+
- The 3B number used a **pageable** store (this box cannot page-lock 5.55 GB),
|
|
77
|
+
so it is a lower bound.
|
|
78
|
+
- `expandable_segments:True` is silently ignored on Windows; Soup detects this
|
|
79
|
+
and does not claim it is active.
|
|
80
|
+
- Numbers are Windows/WDDM and therefore systematically pessimistic vs Linux.
|
|
81
|
+
|
|
82
|
+
## [0.71.41] - 2026-07-19
|
|
83
|
+
|
|
84
|
+
**`soup reward stress`: is your reward verifier gameable?** Turn the reward-hacking
|
|
85
|
+
detector on the *verifier itself*. `soup reward synth` (v0.71.40) proves a verifier
|
|
86
|
+
separates your references from friendly perturbations; `stress` asks the adversarial
|
|
87
|
+
question a reward-hacking model asks at train time — *does the verifier pay out for
|
|
88
|
+
degenerate junk?* It feeds empty, length-padded, repetition, and sentinel-spam
|
|
89
|
+
completions and flags any the verifier accepts. Pure, offline, exit 0 = robust /
|
|
90
|
+
2 = gameable / 1 = error. Nothing in TRL / Unsloth / Axolotl / OpenRLHF tests a
|
|
91
|
+
verifier for gameability.
|
|
92
|
+
|
|
93
|
+
### Added
|
|
94
|
+
|
|
95
|
+
- **`soup reward stress <reward.py|builtin> [--references golds.jsonl]`** — adversarial
|
|
96
|
+
verifier probe. Attacks (`--attacks empty,length,repetition,sentinel`, `--sentinel`)
|
|
97
|
+
are scored against the real gold, so numeric / tool_call / json_schema verifiers get a
|
|
98
|
+
valid target and still must reject the junk. Reports a per-attack accept-rate table +
|
|
99
|
+
an overall gameability verdict (`--max-gameable`, `--threshold`, `--output-report`).
|
|
100
|
+
Loads the target through the existing reward loader, so it probes a synthesized `.py`
|
|
101
|
+
**and** a builtin (`accuracy` / `format` / `verifiable`). A gold-requiring verifier
|
|
102
|
+
probed with no `--references` is a hard error, never a false "robust".
|
|
103
|
+
|
|
104
|
+
### Fixed
|
|
105
|
+
|
|
106
|
+
- Corrected the Telemetry section in the ops docs: Soup's telemetry primitives exist but
|
|
107
|
+
are **not wired to any command** — no data is ever sent today (the previous wording
|
|
108
|
+
implied a live opt-in sender). Wiring is deferred until a public privacy policy ships.
|
|
109
|
+
|
|
15
110
|
## [0.71.40] - 2026-07-19
|
|
16
111
|
|
|
17
112
|
**`soup reward synth`: auto-generate a deterministic reward verifier from your data.**
|
|
@@ -116,11 +116,11 @@ src/soup_cli/
|
|
|
116
116
|
cans/ - Shareable .can artifact format + run/publish orchestrator (v0.26.0 + v0.33.0)
|
|
117
117
|
data/traces/ - Trace-to-Preference harvester (v0.26.0)
|
|
118
118
|
data/collators.py - CrossDocCollator for sample packing (v0.33.0)
|
|
119
|
-
utils/ - GPU, errors, MoE, GaLore, QAT, Unsloth, vLLM, SGLang, Liger, FlashAttn, FSDP, Ring Attention, long-context, quality, curriculum, freeze, dataset-registry, mlx, peft_builder, paths, topology, launcher, mii, pipeline, cut_ce, fp8, gradient_ckpt, kernel_picker, cross_doc_attn, activation_offload, hf, spec_pairing, structured_output, metrics, tracing, auto_quant, lr_finder, grad_accum, mixed_precision, warmup, spike_recovery, convergence, v028_features, multipack_sampler, multipack, neat_packing, jinja_analyzer, quant_menu, relora, peft_patches, peft_wiring, dpo_variants, optimizer_zoo, lr_groups, loftq_init, block_expansion, tts, classifier, distill, bitnet, ebft_gdpo, moe_quant, reasoning_effort, gguf_quant, kv_cache, advanced_precision, save_formats, deploy_measure, advise, advise_history, adapter_diff, adapter_merge, blame, adapter_branch, unlearning, unlearning_eval, knowledge_edit, edit_governor, edit_diff, ra_dit, steering, citation_faithful, grace_codebook, ingest_sources, prune_prompt, active_sampler, ab_test, drift_alarm, tunability, terraform_plan, env_lock, hardware_fit, completions, license_advisor, behavior_battery, capability_suite, checklist_dsl, irt, sae_diff, sleeper_probe, interference, probe_pack, cmaes_merge, vector_bank, mole_routing, adapter_pr, soup_lock, adapter_bisect, prompt_compile, prompt_distill, compile_tools, apple_adapter, local_rl, build_dag, expectations, magpie, persona_hub, brain_rot, reward_hacking, uld, minillm, rl_checkpoint, iterative_dpo, echo_trap, mod, local_rl_scheduler, spectrum_scan, ship_verdict, reward_hack_control, data_doctor, data_lint, shrink, best_of_n, evolve
|
|
119
|
+
utils/ - GPU, errors, MoE, GaLore, QAT, Unsloth, vLLM, SGLang, Liger, FlashAttn, FSDP, Ring Attention, long-context, quality, curriculum, freeze, dataset-registry, mlx, peft_builder, paths, topology, launcher, mii, pipeline, cut_ce, fp8, gradient_ckpt, kernel_picker, cross_doc_attn, activation_offload, hf, spec_pairing, structured_output, metrics, tracing, auto_quant, lr_finder, grad_accum, mixed_precision, warmup, spike_recovery, convergence, v028_features, multipack_sampler, multipack, neat_packing, jinja_analyzer, quant_menu, relora, peft_patches, peft_wiring, dpo_variants, optimizer_zoo, lr_groups, loftq_init, block_expansion, tts, classifier, distill, bitnet, ebft_gdpo, moe_quant, reasoning_effort, gguf_quant, kv_cache, advanced_precision, save_formats, deploy_measure, advise, advise_history, adapter_diff, adapter_merge, blame, adapter_branch, unlearning, unlearning_eval, knowledge_edit, edit_governor, edit_diff, ra_dit, steering, citation_faithful, grace_codebook, ingest_sources, prune_prompt, active_sampler, ab_test, drift_alarm, tunability, terraform_plan, env_lock, hardware_fit, completions, license_advisor, behavior_battery, capability_suite, checklist_dsl, irt, sae_diff, sleeper_probe, interference, probe_pack, cmaes_merge, vector_bank, mole_routing, adapter_pr, soup_lock, adapter_bisect, prompt_compile, prompt_distill, compile_tools, apple_adapter, local_rl, build_dag, expectations, magpie, persona_hub, brain_rot, reward_hacking, uld, minillm, rl_checkpoint, iterative_dpo, echo_trap, mod, local_rl_scheduler, spectrum_scan, ship_verdict, reward_hack_control, data_doctor, data_lint, shrink, best_of_n, evolve, reward_synth, reward_stress, layer_stream, layer_shard, layer_stream_runtime
|
|
120
120
|
templates/ - 21 built-in soup.yaml templates (YAML + manifest.json) with load_template loader (v0.39.0, +bco v0.40.0, +4 compliance v0.71.35)
|
|
121
121
|
ui/ - Web UI (FastAPI + HTML/JS SPA)
|
|
122
122
|
|
|
123
|
-
tests/ - Test suite (
|
|
123
|
+
tests/ - Test suite (324 files, 16735 tests)
|
|
124
124
|
examples/ - Real-world config examples and datasets
|
|
125
125
|
```
|
|
126
126
|
|
|
@@ -150,7 +150,7 @@ pytest tests/test_data.py::test_detect_alpaca_format -v
|
|
|
150
150
|
pytest tests/ --cov=soup_cli --cov-report=html
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
-
### Test Files (
|
|
153
|
+
### Test Files (318 files)
|
|
154
154
|
|
|
155
155
|
> A representative sample of the suite below. Run `pytest tests/ -v` for the complete list.
|
|
156
156
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: soup-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.72.0
|
|
4
4
|
Summary: Fine-tune and post-train LLMs in one command. No SSH, no config hell.
|
|
5
5
|
Project-URL: Homepage, https://github.com/MakazhanAlpamys/Soup
|
|
6
6
|
Project-URL: Repository, https://github.com/MakazhanAlpamys/Soup
|
|
@@ -193,27 +193,44 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
193
193
|
|
|
194
194
|
## What's New
|
|
195
195
|
|
|
196
|
-
**v0.
|
|
196
|
+
**v0.72.0 — Layer streaming (BETA).** Fine-tune models that don't fit in your card. The frozen
|
|
197
|
+
base streams from CPU RAM one decoder layer at a time into a small pool of VRAM buffers while the
|
|
198
|
+
LoRA adapters stay resident, so peak VRAM is bounded by one layer rather than the whole model.
|
|
199
|
+
**Qwen2.5-3B trains in 2.15 GB on a 4 GB card, where a resident run OOMs.**
|
|
200
|
+
|
|
201
|
+
- **`training.stream_layers: true`** — a config key, not a CLI flag. Tune with
|
|
202
|
+
`stream_source` (`ram` in v0.72.0; `disk` is v0.72.2) and `stream_buffers` (2–8, default 2).
|
|
203
|
+
- **Measured on a 4 GB RTX 3050 Laptop** (batch 1, gradient checkpointing on): 0.5B at
|
|
204
|
+
978.6 tok/s / 1.47 GB, 1.5B at 525.0 tok/s / 1.82 GB, 3B at 143.1 tok/s / 2.15 GB.
|
|
205
|
+
- **Honest cost: 1.43× slower than resident**, measured at 0.5B — the only apples-to-apples
|
|
206
|
+
comparison available on that box, because 1.5B and above cannot run resident there at all.
|
|
207
|
+
- **Proof-of-mechanism at 3B.** Nothing above 3B was measured; no 8B/14B claim is supported.
|
|
208
|
+
Scope: RAM tier, bf16, `task: sft`, Llama/Qwen, batch size 1, no gradient accumulation, no
|
|
209
|
+
`--resume`. 4-bit (NF4) streaming is **v0.72.1** and is refused with a clear message today.
|
|
197
210
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
211
|
+
```yaml
|
|
212
|
+
# soup.yaml — then just `soup train --config soup.yaml`
|
|
213
|
+
training:
|
|
214
|
+
stream_layers: true # base streams from RAM; only the adapter trains
|
|
215
|
+
batch_size: 1
|
|
216
|
+
quantization: none # NF4 streaming lands in v0.72.1
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
<details>
|
|
220
|
+
<summary>Previous release — v0.71.40, soup reward synth (generate a reward verifier from your data)</summary>
|
|
221
|
+
|
|
222
|
+
Point `soup reward synth` at a JSONL of reference outputs and it infers a deterministic verifier,
|
|
223
|
+
writes a readable / committable `.py` reward function, and — the part nobody else does — *refuses* to
|
|
224
|
+
emit one that can't tell your references from bad answers (four families: `numeric` / `json_schema` /
|
|
225
|
+
`regex` / `tool_call`; a mandatory calibration report is the moat). Reward ensembles
|
|
226
|
+
(`reward_fn: "accuracy,format"`) also train now. (#311)
|
|
208
227
|
|
|
209
228
|
```bash
|
|
210
|
-
# synth a verifier from reference answers, calibrate it, keep it only if it discriminates
|
|
211
229
|
soup reward synth references.jsonl -o reward.py --output-report calib.json
|
|
212
|
-
|
|
213
|
-
# then train against the reward you just generated
|
|
214
|
-
# training: { reward_fn: reward.py } (or an ensemble: reward_fn: "accuracy,format")
|
|
215
230
|
```
|
|
216
231
|
|
|
232
|
+
</details>
|
|
233
|
+
|
|
217
234
|
<details>
|
|
218
235
|
<summary>Previous release — v0.71.39, CI for weights not prompts (emit + provenance-bind the ship verdict)</summary>
|
|
219
236
|
|
|
@@ -357,7 +374,7 @@ The full feature reference lives in [`docs/`](docs/). Start here:
|
|
|
357
374
|
|---|---|
|
|
358
375
|
| [Training tasks & methods](docs/training.md) | SFT, DPO/GRPO/PPO/KTO/ORPO/SimPO/IPO/BCO, tool-calling, PRM, pre-training, distillation, classification, vision/audio/TTS, unlearning, RAFT/RA-DIT, loop-hardening detectors |
|
|
359
376
|
| [PEFT, long context & efficiency](docs/peft-and-efficiency.md) | DoRA, LoRA+, rsLoRA, VeRA, OLoRA, NEFTune, PiSSA, ReLoRA, optimizer & PEFT zoo, LLaMA Pro, GaLore, YaRN/LongLoRA, packing, curriculum, auto-tuning |
|
|
360
|
-
| [Performance & quantization](docs/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 |
|
|
377
|
+
| [Performance & quantization](docs/performance-and-quantization.md) | QAT, FP8, Quant Menu (I + II), KV-cache, NVFP4, save formats, Cut Cross-Entropy, gradient checkpointing, kernels, activation offloading, layer streaming, multi-GPU / DeepSpeed / FSDP |
|
|
361
378
|
| [Data engineering](docs/data.md) | Formats, the Axolotl/LF-parity pipeline, data tools, synthetic generation & forge, quality scorecards, trace tooling, remote datasets, mixing, recipe DAGs |
|
|
362
379
|
| [Evaluation & probes](docs/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` |
|
|
363
380
|
| [Serving & export](docs/serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding (train + measure your own draft), deploy autopilot, Web UI, Agent Forge |
|
|
@@ -49,27 +49,44 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
49
49
|
|
|
50
50
|
## What's New
|
|
51
51
|
|
|
52
|
-
**v0.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
-
|
|
58
|
-
(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
52
|
+
**v0.72.0 — Layer streaming (BETA).** Fine-tune models that don't fit in your card. The frozen
|
|
53
|
+
base streams from CPU RAM one decoder layer at a time into a small pool of VRAM buffers while the
|
|
54
|
+
LoRA adapters stay resident, so peak VRAM is bounded by one layer rather than the whole model.
|
|
55
|
+
**Qwen2.5-3B trains in 2.15 GB on a 4 GB card, where a resident run OOMs.**
|
|
56
|
+
|
|
57
|
+
- **`training.stream_layers: true`** — a config key, not a CLI flag. Tune with
|
|
58
|
+
`stream_source` (`ram` in v0.72.0; `disk` is v0.72.2) and `stream_buffers` (2–8, default 2).
|
|
59
|
+
- **Measured on a 4 GB RTX 3050 Laptop** (batch 1, gradient checkpointing on): 0.5B at
|
|
60
|
+
978.6 tok/s / 1.47 GB, 1.5B at 525.0 tok/s / 1.82 GB, 3B at 143.1 tok/s / 2.15 GB.
|
|
61
|
+
- **Honest cost: 1.43× slower than resident**, measured at 0.5B — the only apples-to-apples
|
|
62
|
+
comparison available on that box, because 1.5B and above cannot run resident there at all.
|
|
63
|
+
- **Proof-of-mechanism at 3B.** Nothing above 3B was measured; no 8B/14B claim is supported.
|
|
64
|
+
Scope: RAM tier, bf16, `task: sft`, Llama/Qwen, batch size 1, no gradient accumulation, no
|
|
65
|
+
`--resume`. 4-bit (NF4) streaming is **v0.72.1** and is refused with a clear message today.
|
|
66
|
+
|
|
67
|
+
```yaml
|
|
68
|
+
# soup.yaml — then just `soup train --config soup.yaml`
|
|
69
|
+
training:
|
|
70
|
+
stream_layers: true # base streams from RAM; only the adapter trains
|
|
71
|
+
batch_size: 1
|
|
72
|
+
quantization: none # NF4 streaming lands in v0.72.1
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
<details>
|
|
76
|
+
<summary>Previous release — v0.71.40, soup reward synth (generate a reward verifier from your data)</summary>
|
|
77
|
+
|
|
78
|
+
Point `soup reward synth` at a JSONL of reference outputs and it infers a deterministic verifier,
|
|
79
|
+
writes a readable / committable `.py` reward function, and — the part nobody else does — *refuses* to
|
|
80
|
+
emit one that can't tell your references from bad answers (four families: `numeric` / `json_schema` /
|
|
81
|
+
`regex` / `tool_call`; a mandatory calibration report is the moat). Reward ensembles
|
|
82
|
+
(`reward_fn: "accuracy,format"`) also train now. (#311)
|
|
64
83
|
|
|
65
84
|
```bash
|
|
66
|
-
# synth a verifier from reference answers, calibrate it, keep it only if it discriminates
|
|
67
85
|
soup reward synth references.jsonl -o reward.py --output-report calib.json
|
|
68
|
-
|
|
69
|
-
# then train against the reward you just generated
|
|
70
|
-
# training: { reward_fn: reward.py } (or an ensemble: reward_fn: "accuracy,format")
|
|
71
86
|
```
|
|
72
87
|
|
|
88
|
+
</details>
|
|
89
|
+
|
|
73
90
|
<details>
|
|
74
91
|
<summary>Previous release — v0.71.39, CI for weights not prompts (emit + provenance-bind the ship verdict)</summary>
|
|
75
92
|
|
|
@@ -213,7 +230,7 @@ The full feature reference lives in [`docs/`](docs/). Start here:
|
|
|
213
230
|
|---|---|
|
|
214
231
|
| [Training tasks & methods](docs/training.md) | SFT, DPO/GRPO/PPO/KTO/ORPO/SimPO/IPO/BCO, tool-calling, PRM, pre-training, distillation, classification, vision/audio/TTS, unlearning, RAFT/RA-DIT, loop-hardening detectors |
|
|
215
232
|
| [PEFT, long context & efficiency](docs/peft-and-efficiency.md) | DoRA, LoRA+, rsLoRA, VeRA, OLoRA, NEFTune, PiSSA, ReLoRA, optimizer & PEFT zoo, LLaMA Pro, GaLore, YaRN/LongLoRA, packing, curriculum, auto-tuning |
|
|
216
|
-
| [Performance & quantization](docs/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 |
|
|
233
|
+
| [Performance & quantization](docs/performance-and-quantization.md) | QAT, FP8, Quant Menu (I + II), KV-cache, NVFP4, save formats, Cut Cross-Entropy, gradient checkpointing, kernels, activation offloading, layer streaming, multi-GPU / DeepSpeed / FSDP |
|
|
217
234
|
| [Data engineering](docs/data.md) | Formats, the Axolotl/LF-parity pipeline, data tools, synthetic generation & forge, quality scorecards, trace tooling, remote datasets, mixing, recipe DAGs |
|
|
218
235
|
| [Evaluation & probes](docs/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` |
|
|
219
236
|
| [Serving & export](docs/serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding (train + measure your own draft), deploy autopilot, Web UI, Agent Forge |
|
|
@@ -7,8 +7,8 @@ running the most recent version from PyPI (`pip install -U soup-cli`).
|
|
|
7
7
|
|
|
8
8
|
| Version | Supported |
|
|
9
9
|
| ------- | ------------------ |
|
|
10
|
-
| 0.
|
|
11
|
-
| < 0.
|
|
10
|
+
| 0.72.x | :white_check_mark: |
|
|
11
|
+
| < 0.72 | :x: |
|
|
12
12
|
|
|
13
13
|
## Reporting a Vulnerability
|
|
14
14
|
|
|
@@ -7,9 +7,9 @@ feature reference — every `soup` capability, grouped by area.
|
|
|
7
7
|
|
|
8
8
|
| Guide | Covers |
|
|
9
9
|
|---|---|
|
|
10
|
-
| [Training tasks & methods](training.md) | SFT, DPO/GRPO/PPO/KTO/ORPO/SimPO/IPO/BCO, tool-calling, PRM, pre-training, distillation, classification, vision/audio/TTS, unlearning, RAFT/RA-DIT, loop-hardening detectors |
|
|
10
|
+
| [Training tasks & methods](training.md) | SFT, DPO/GRPO/PPO/KTO/ORPO/SimPO/IPO/BCO, tool-calling, PRM, pre-training, distillation, classification, vision/audio/TTS, unlearning, RAFT/RA-DIT, loop-hardening detectors, reward-verifier synthesis |
|
|
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, depth pruning + distill-heal (`soup shrink`) |
|
|
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 |
|
|
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, layer streaming, multi-GPU / DeepSpeed / FSDP |
|
|
13
13
|
| [Data engineering](data.md) | Formats, the Axolotl/LF-parity pipeline, data tools, synthetic generation & forge, quality scorecards, trace tooling, remote datasets, mixing, recipe DAGs |
|
|
14
14
|
| [Evaluation & probes](evaluation.md) | Eval design/gate, eval-gated training, benchmarks, NLG metrics, calibration, Elo arena, diagnose, `soup ship` verdict, post-train X-ray probes, A/B, drift, tunability, `soup advise` |
|
|
15
15
|
| [Serving & export](serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding (train + measure your own draft), deploy autopilot, Web UI, Agent Forge |
|
|
@@ -743,15 +743,9 @@ pip install soup-cli[trackers] # mlflow + swanlab + trackio
|
|
|
743
743
|
```
|
|
744
744
|
|
|
745
745
|
|
|
746
|
-
## Telemetry (
|
|
746
|
+
## Telemetry (not yet wired)
|
|
747
747
|
|
|
748
|
-
Soup
|
|
749
|
-
|
|
750
|
-
```bash
|
|
751
|
-
SOUP_TELEMETRY=1 soup train --config soup.yaml
|
|
752
|
-
```
|
|
753
|
-
|
|
754
|
-
The sender uses a 1-second hard timeout, HTTPS-only with private-IP / link-local rejection (same SSRF policy as hub endpoints), and swallows every exception silently — telemetry can never crash training. Disabled by default until a public privacy policy ships.
|
|
748
|
+
Soup contains opt-in, hardware-info-only telemetry primitives in `utils/trackers.py` (`build_telemetry_payload` / `send_telemetry_payload`), but they are **not wired to any command** — no data is ever sent, and no environment variable enables sending today. When wired, the payload will carry only `soup_version` / `command` / `python` major.minor / `os` / `arch` / optional `duration_seconds` — never dataset paths, model names, or config contents — behind a 1-second hard timeout and the same HTTPS-only, private-IP-rejecting SSRF policy as hub endpoints, swallowing every exception so telemetry can never crash training. Wiring is deferred until a public privacy policy is published.
|
|
755
749
|
|
|
756
750
|
|
|
757
751
|
## Plugin System
|
|
@@ -30,6 +30,7 @@ soup merge-sharded-fsdp-weights ./shards -o merged.safetensors Consolidate FSDP
|
|
|
30
30
|
soup delinearize-llama4 ./src --target ./out [--num-experts N] [--plan-only] Live Llama-4 fused-expert reshape [E*din,dout] -> [E,din,dout] + sidecar copy (v0.71.21)
|
|
31
31
|
soup spectrum scan --model <id|path> --top-percent 50 [--modules mlp,attn] [-o patch.yaml] Spectrum SNR scan (no model load) -> training.unfrozen_parameters YAML patch (v0.71.23)
|
|
32
32
|
soup train --config sft.yaml # training.lisa_enabled: true [lisa_num_layers lisa_interval_steps] LISA layerwise importance sampling — full-FT quality at LoRA-like memory (sft/transformers/text/quantization=none) (v0.71.34)
|
|
33
|
+
soup train --config sft.yaml # training.stream_layers: true [stream_source stream_buffers] BETA layer streaming — the frozen base streams from CPU RAM one decoder layer at a time, so peak VRAM is bounded by ONE layer (sft/transformers/text/quantization=none, batch 1) (v0.72.0)
|
|
33
34
|
soup export --model ./output --format gguf Export to GGUF (Ollama)
|
|
34
35
|
soup export --model ./output --deploy ollama Export GGUF + auto-deploy to Ollama
|
|
35
36
|
soup export --model ./output --format onnx Export to ONNX
|
|
@@ -186,6 +187,10 @@ soup reward synth refs.jsonl -o reward.py Synthesize a deterministic reward
|
|
|
186
187
|
soup reward synth ... --kind numeric|json_schema|regex|tool_call Force a verifier family (default: auto-detect)
|
|
187
188
|
soup reward synth ... --plan-only Report the induced spec + calibration plan; write nothing
|
|
188
189
|
soup reward synth ... --output-report r.json --min-discrimination 0.5 Save the calibration JSON / set the refusal threshold (exit 0 emit / 2 refuse / 1 error)
|
|
190
|
+
soup reward stress reward.py --references golds.jsonl Adversarially probe a verifier for gameability — empty/length/repetition/sentinel junk (v0.71.41)
|
|
191
|
+
soup reward stress verifiable --verifiable-domain math --references golds.jsonl Probe a builtin verifier instead of a .py file
|
|
192
|
+
soup reward stress ... --attacks empty,length,repetition,sentinel --sentinel GOLD --threshold 0.5 --max-gameable 0.0 Tune the attack set / accept threshold / tolerance
|
|
193
|
+
soup reward stress ... --output-report r.json Save the per-attack report JSON (exit 0 robust / 2 gameable / 1 error)
|
|
189
194
|
soup tui Full-screen Textual dashboard (requires [tui] extra)
|
|
190
195
|
soup train --config soup.yaml --profile Record torch.profiler trace to <output>/profiles/
|
|
191
196
|
soup --log-level quiet|normal|verbose|debug Global logging tier (Rich-formatted)
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
- [Cross-Document Attention Masking](#cross-document-attention-masking)
|
|
15
15
|
- [Quant Menu — 9 Quantization Formats](#quant-menu--9-quantization-formats)
|
|
16
16
|
- [Activation Offloading (Small-VRAM Large-Batch)](#activation-offloading-small-vram-large-batch)
|
|
17
|
+
- [Layer Streaming (BETA, v0.72.0)](#layer-streaming-beta-v0720)
|
|
17
18
|
- [Correctness First (v0.36.0)](#correctness-first-v0360)
|
|
18
19
|
- [Multi-GPU / DeepSpeed / FSDP](#multi-gpu--deepspeed--fsdp)
|
|
19
20
|
- [Performance + Long-Context](#performance--long-context)
|
|
@@ -225,6 +226,108 @@ training:
|
|
|
225
226
|
Not compatible with unsloth (own memory manager) or mlx. Wired across every transformer-backend trainer (SFT, DPO, GRPO, KTO, ORPO, SimPO, IPO, PPO, Reward-Model, Embedding, Pretrain).
|
|
226
227
|
|
|
227
228
|
|
|
229
|
+
## Layer Streaming (BETA, v0.72.0)
|
|
230
|
+
|
|
231
|
+
Stream frozen base-model decoder layers ONE at a time from CPU RAM into small VRAM buffers instead of keeping the whole base resident. Peak VRAM is bounded by the size of a single layer, not the entire model — so models that don't fit resident on your GPU can now train at all.
|
|
232
|
+
|
|
233
|
+
```yaml
|
|
234
|
+
training:
|
|
235
|
+
stream_layers: true # Enable layer streaming
|
|
236
|
+
stream_source: auto # 'auto' (same-host RAM), 'ram', 'disk' (v0.72.2)
|
|
237
|
+
stream_buffers: 2 # Double-buffering; range [2, 8]
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
# Layer streaming is a CONFIG key, not a CLI flag — just train normally:
|
|
242
|
+
soup train --config soup.yaml
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**How it works.** LoRA adapters + their gradients + optimizer state stay resident in VRAM (they are small). The frozen base lives in CPU RAM, page-locked when the machine allows it, and is streamed: each decoder layer is copied into one of two pre-allocated VRAM buffers on a dedicated CUDA stream while the previous layer is still computing, so the load overlaps the compute. Each layer is read **twice** per step — once in the forward pass and once when the backward pass recomputes it — because `dL/dx = Wᵀ · dL/dy` needs the weights to reach the layers below. That is physics, not an implementation detail, and it is why streaming costs time.
|
|
246
|
+
|
|
247
|
+
The tradeoff: **1.43× slower than resident training**, measured at 0.5B — the only apples-to-apples comparison available on the reference box, because 1.5B and above cannot run resident there at all.
|
|
248
|
+
|
|
249
|
+
**Measured numbers (RTX 3050 Laptop 4 GB, Windows 11, bf16 LoRA, batch 1, 50 steps after 10 warmup):**
|
|
250
|
+
|
|
251
|
+
| Model | Seq Length | Throughput | GPU Util | Peak VRAM |
|
|
252
|
+
|---|---|---|---|---|
|
|
253
|
+
| Qwen2.5-0.5B | 512 | 978.6 tok/s | 91.4% | 1.47 GB |
|
|
254
|
+
| Qwen2.5-1.5B | 512 | 525.0 tok/s | 96.8% | 1.82 GB |
|
|
255
|
+
| Qwen2.5-1.5B | 1024 | 487.6 tok/s | 96.7% | 2.96 GB |
|
|
256
|
+
| Qwen2.5-3B | 512 | 143.1 tok/s | 79.3% | 2.15 GB |
|
|
257
|
+
|
|
258
|
+
**Headline:** Qwen2.5-3B trains in **2.15 GB** on a 4 GB card, where a resident run OOMs.
|
|
259
|
+
|
|
260
|
+
**Honest scope (v0.72.0 = proof-of-mechanism):**
|
|
261
|
+
- **Models measured:** Qwen2.5-0.5B, 1.5B and 3B, plus a live `soup train` on SmolLM2-135M. **Nothing above 3B was measured, and no 8B / 14B / 70B claim is supported.**
|
|
262
|
+
- **RAM tier only.** `stream_source: ram` (`auto` resolves to it). The disk overflow tier ships in **v0.72.2**.
|
|
263
|
+
- **Llama / Qwen only**, `task: sft`, `backend: transformers`, `modality: text`.
|
|
264
|
+
- **`batch_size: 1`**, no gradient accumulation, no `--resume` — all ship in **v0.72.2**.
|
|
265
|
+
- **bf16 base; `quantization: none` is required.** 4-bit (NF4) weights carry a quantisation state and cannot be byte-copied into a plain buffer, so NF4 streaming is **v0.72.1**. A `4bit` config is refused today with a message saying exactly that.
|
|
266
|
+
- **The 3B throughput is a LOWER BOUND.** The reference box could not page-lock the 5.55 GB base (its measured page-locked ceiling is 7.65 GB, and a CUDA context plus the model skeleton did not leave room), so that run fell back to a pageable store. Pageable memory makes the host-to-device copy synchronous, which costs overlap — visible as the GPU-utilisation drop from 96.8% (1.5B, pinned) to 79.3% (3B, pageable). Soup does this fallback automatically **and prints the cost** rather than absorbing it silently.
|
|
267
|
+
- Numbers are Windows/WDDM and therefore systematically pessimistic versus Linux. `expandable_segments:True` is silently ignored on Windows; Soup detects that and does not claim it is active.
|
|
268
|
+
|
|
269
|
+
**Rejected at config load (each names the release that lifts it):**
|
|
270
|
+
- `stream_source: disk` → the disk tier is v0.72.2
|
|
271
|
+
- `quantization` other than `none` → NF4 streaming is v0.72.1
|
|
272
|
+
- `backend: unsloth` / `backend: mlx` → streaming replaces the model-load path those backends own
|
|
273
|
+
- `task` other than `sft` → preference losses are v0.72.3
|
|
274
|
+
- `gradient_accumulation_steps > 1` → every micro-batch re-reads the whole base, so accumulation multiplies streaming IO linearly (v0.72.2)
|
|
275
|
+
- `batch_size` other than `1` → v0.72.2
|
|
276
|
+
- `lora.use_dora` / `lora.use_vera` / `lora.init_strategy` other than `random` → these initialise from the real base weight, which is on the meta device under streaming
|
|
277
|
+
- `unfrozen_parameters`, `lisa_enabled`, `packing`, `multipack`, `use_fsdp2_compile`, `train_router_only`, `expand_layers` → each independently rewrites or re-freezes the same layers
|
|
278
|
+
- `stream_source` / `stream_buffers` set while `stream_layers: false` → a footgun, refused
|
|
279
|
+
- an architecture outside `llama` / `qwen2` / `qwen3` → named explicitly, with the allowlist
|
|
280
|
+
|
|
281
|
+
**Config example:**
|
|
282
|
+
|
|
283
|
+
```yaml
|
|
284
|
+
base: Qwen/Qwen2.5-3B
|
|
285
|
+
task: sft
|
|
286
|
+
backend: transformers
|
|
287
|
+
|
|
288
|
+
data:
|
|
289
|
+
train: ./data.jsonl
|
|
290
|
+
format: alpaca
|
|
291
|
+
max_length: 512
|
|
292
|
+
val_split: 0.1
|
|
293
|
+
|
|
294
|
+
training:
|
|
295
|
+
epochs: 3
|
|
296
|
+
lr: 2e-5
|
|
297
|
+
batch_size: 1 # required; larger batches in v0.72.2
|
|
298
|
+
gradient_accumulation_steps: 1 # required; accumulation in v0.72.2
|
|
299
|
+
quantization: none # required; NF4 streaming is v0.72.1
|
|
300
|
+
gradient_checkpointing: true # handled per-layer by the streamer
|
|
301
|
+
stream_layers: true # Enable layer streaming
|
|
302
|
+
stream_source: auto # RAM-based (disk in v0.72.2)
|
|
303
|
+
stream_buffers: 2 # double-buffering
|
|
304
|
+
lora:
|
|
305
|
+
r: 64
|
|
306
|
+
alpha: 16
|
|
307
|
+
|
|
308
|
+
output: ./output
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
**Performance notes:**
|
|
312
|
+
- 1.43× slower than resident training, measured at 0.5B (the only size on the reference box where a resident baseline genuinely fits in 4 GB and is therefore a fair comparison).
|
|
313
|
+
- The 1.5B runs sit at ~97% GPU utilisation, i.e. compute-bound: with a page-locked store the layer loads hide almost completely behind compute. The 3B run's 79.3% is **not** a model-size effect — it is the cost of the pageable-store fallback on that particular box.
|
|
314
|
+
- Correctness is not a tradeoff: streamed and resident forward passes were verified **bit-exact**, and a 100-step streamed loss curve matched resident exactly. Streaming substitutes the same weight bytes into the same kernels.
|
|
315
|
+
|
|
316
|
+
**Troubleshooting:**
|
|
317
|
+
- **"layer streaming needs the base to fit in RAM"** — the base is larger than free RAM. Free RAM or pick a smaller base; the disk overflow tier is v0.72.2.
|
|
318
|
+
- **"could not page-lock the base … falling back to a PAGEABLE RAM store"** — expected on a busy machine. Training continues, more slowly. Close other applications to keep the pinned store.
|
|
319
|
+
- **"layer streaming does not support model_type=…"** — v0.72.0 covers Llama and Qwen only.
|
|
320
|
+
- **Slower than you expected** — layer streaming trades time for memory. If the model already fits resident on your card, do not enable it.
|
|
321
|
+
|
|
322
|
+
**Roadmap (each refusal names its release):**
|
|
323
|
+
- 4-bit (NF4) streaming — **v0.72.1**, the first genuinely useful capability jump
|
|
324
|
+
- Disk overflow tier, batch size > 1, gradient accumulation, checkpoint/resume, more architectures (Mistral / Gemma / Phi) — **v0.72.2**
|
|
325
|
+
- Preference losses (DPO / ORPO / SimPO / KTO) — **v0.72.3**. GRPO and PPO are explicitly **not** planned: rollouts need generation, which re-reads the model per token
|
|
326
|
+
- A published 14B-on-8 GB reference benchmark — hardware-blocked; it needs an 8 GB card and 32 GB of RAM, which the development box does not have
|
|
327
|
+
|
|
328
|
+
**Shard cache.** The first streaming run rewrites the checkpoint into one safetensors shard per decoder layer under `~/.soup/layer-stream/` (override with `SOUP_LAYER_STREAM_CACHE_DIR`). That costs disk space roughly equal to the base. The cache is keyed to a fingerprint of the source checkpoint, so a base retrained in place re-shards instead of silently training against stale weights.
|
|
329
|
+
|
|
330
|
+
|
|
228
331
|
## Correctness First (v0.36.0)
|
|
229
332
|
|
|
230
333
|
Four silent-failure modes Soup had → loud failures.
|
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
> SFT, DPO/GRPO/PPO/KTO/ORPO/SimPO/IPO/BCO, tool-calling, PRM, pre-training, distillation, classification, vision/audio/TTS, unlearning, RAFT/RA-DIT, and the loop-hardening detectors.
|
|
6
6
|
|
|
7
|
+
> **Training a model bigger than your GPU?** `training.stream_layers: true` streams the
|
|
8
|
+
> frozen base from CPU RAM one decoder layer at a time, so peak VRAM is bounded by one
|
|
9
|
+
> layer instead of the whole model —
|
|
10
|
+
> see [Layer Streaming](performance-and-quantization.md#layer-streaming-beta-v0720).
|
|
11
|
+
|
|
7
12
|
**Contents:**
|
|
8
13
|
|
|
9
14
|
- [Continual-learning rehearsal (`--replay`)](#continual-learning-rehearsal---replay)
|
|
@@ -897,6 +902,31 @@ strongly the verifier must separate references from perturbed negatives before i
|
|
|
897
902
|
v1 is deterministic families only — a `\boxed{}`/`####` marker helps the numeric verifier, and
|
|
898
903
|
completions are prompted to mark their answer (standard RLVR practice).
|
|
899
904
|
|
|
905
|
+
### Stress-test a verifier for gameability (`soup reward stress`)
|
|
906
|
+
|
|
907
|
+
A verifier that passes calibration still might pay out for junk. `soup reward stress` feeds the
|
|
908
|
+
verifier deterministic degenerate completions — empty, length-padded, repeated, and
|
|
909
|
+
sentinel-spam — scored against your real gold answers, and flags any it **accepts**. It's the
|
|
910
|
+
adversarial counterpart to `synth`: calibration proves the verifier tells references from
|
|
911
|
+
*friendly* bad answers; `stress` asks whether a reward-hacking model could game it.
|
|
912
|
+
|
|
913
|
+
```bash
|
|
914
|
+
# probe a synthesized verifier (or any reward .py) — exit 0 robust, 2 gameable, 1 error
|
|
915
|
+
soup reward stress reward.py --references golds.jsonl --output-report stress.json
|
|
916
|
+
|
|
917
|
+
# probe a builtin verifier instead of a .py file
|
|
918
|
+
soup reward stress verifiable --verifiable-domain math --references golds.jsonl
|
|
919
|
+
|
|
920
|
+
# tune the attack set / accept threshold / gameability tolerance
|
|
921
|
+
soup reward stress reward.py --references golds.jsonl \
|
|
922
|
+
--attacks empty,length,repetition,sentinel --sentinel GOLD \
|
|
923
|
+
--threshold 0.5 --max-gameable 0.0
|
|
924
|
+
```
|
|
925
|
+
|
|
926
|
+
The report shows a per-attack accept-rate and an overall verdict. A gold-requiring verifier probed
|
|
927
|
+
with **no** `--references` is a hard error (it can't be measured), never a false "robust". Probing a
|
|
928
|
+
`.py` executes its module code, like any custom reward — only stress files you trust.
|
|
929
|
+
|
|
900
930
|
### Verifiable Rewards (RLVR)
|
|
901
931
|
|
|
902
932
|
Use `reward_fn: verifiable` with a `verifiable_domain` for deterministic, math-checkable rewards — no judge model, no heuristics. Great for GRPO on math, code, or structured-output tasks.
|