soup-cli 0.72.2__tar.gz → 0.72.3__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.72.2 → soup_cli-0.72.3}/CHANGELOG.md +65 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/CONTRIBUTING.md +1 -1
- {soup_cli-0.72.2 → soup_cli-0.72.3}/PKG-INFO +27 -24
- {soup_cli-0.72.2 → soup_cli-0.72.3}/README.md +23 -20
- {soup_cli-0.72.2 → soup_cli-0.72.3}/docs/commands.md +2 -2
- {soup_cli-0.72.2 → soup_cli-0.72.3}/docs/performance-and-quantization.md +69 -14
- {soup_cli-0.72.2 → soup_cli-0.72.3}/docs/training.md +4 -3
- {soup_cli-0.72.2 → soup_cli-0.72.3}/pyproject.toml +9 -2
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/doctor.py +37 -2
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/train.py +7 -17
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/config/schema.py +24 -17
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/sft.py +208 -17
- soup_cli-0.72.3/src/soup_cli/utils/layer_stream.py +844 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/layer_stream_runtime.py +272 -6
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07200.py +52 -26
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07201.py +34 -33
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07202.py +42 -6
- soup_cli-0.72.3/tests/test_v07203.py +1386 -0
- soup_cli-0.72.2/src/soup_cli/utils/layer_stream.py +0 -401
- {soup_cli-0.72.2 → soup_cli-0.72.3}/.dockerignore +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/.github/FUNDING.yml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/.github/pull_request_template.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/.gitignore +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/.mailmap +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/AGENTS.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/CODEOWNERS +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/CONTRIBUTORS.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/Dockerfile +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/LICENSE +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/NOTICE +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/SECURITY.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/docker-compose.yml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/docs/README.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/docs/adapters-and-governance.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/docs/backends-and-ops.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/docs/compliance.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/docs/data.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/docs/evaluation.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/docs/models.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/docs/peft-and-efficiency.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/docs/serving-and-export.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/examples/README.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/examples/reward_hacking/rewards.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/soup.png +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/soup_logo_svg.svg +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/cli.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/cloud/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/cloud/modal.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/_eval_v0650.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/_eval_v07110.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/adapters.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/advise.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/card.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/ci.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/data.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/data_canary.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/data_doctor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/data_topics.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/diagnose.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/draft.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/mcp.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/ra_dit.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/reward.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/serve.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/ship.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/shrink.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/spectrum.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/_fixtures/gate/format_json.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/_fixtures/gate/safety.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/_fixtures/gate/tool_call.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/loader.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/envs/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/envs/_common.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/envs/calculator.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/envs/guess_number.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/envs/retrieval_qa.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/eval/gate_suites.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/mcp_server/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/mcp_server/registry.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/mcp_server/server.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/recipes/catalog.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/registry/store.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/eu-ai-act.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/hipaa.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/soc2.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/sr-11-7.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/asr.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/bitnet.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/grpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/mole_routing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/online_dpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/ppo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/raft.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/tts.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/ui/app.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/adapter_arithmetic.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/adapter_fuse.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/advise.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/agent_sandbox.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/asr_metrics.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/best_of_n.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/canary.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/ci_workflow.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/data_doctor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/data_lint.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/diagnose/citation.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/diagnose/live.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/draft.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/edit_kernels.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/embed.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/evolve.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/harm_probe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/hubs.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/interference_live.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/layer_shard.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/lisa.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/live_eval.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/mod.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/peft_wiring.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/prm_reward.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/probe_kernel.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/ra_dit_run.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/raft.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/rehearsal.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/reward_hack_control.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/reward_stress.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/reward_synth.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/rl_checkpoint.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/semdedup.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/ship_verdict.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/shrink.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/spectrum_scan.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/topics.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/truth_probe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/tts_codec.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/unlearn_kernels.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/templates/chat.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/templates/code.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/templates/medical.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/conftest.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/qa/v07114_qa.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_adapters.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_audio.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_autopilot.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_bco.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_bench.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_build_dag.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_callback.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_cans.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_chat.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_chat_template.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_cli.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_cli_startup_is_light.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_code_review_critical.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_code_review_deferred.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_code_review_high.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_code_review_medium_low.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_code_review_recurring.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_config.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_cost.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_curriculum.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_data.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_data_augment.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_data_sample.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_data_split.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_data_tools.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_diff.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_display.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_doctor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_embedding.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_errors.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_eval.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_export.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_formats.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_generate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_gpu.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_grpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_infer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_init.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_ipo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_issue300_online_dpo_train.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_issue302_vision_pad_token.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_issue305_mixed_rank_arithmetic.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_issue308_callback_subclass.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_kto.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_loader.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_log_level.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_merge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_migrate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_moe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_orpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_packing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_part_a_wave1.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_performance.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_ppo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_pretrain.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_profile.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_profiling.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_progress.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_push.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_qat.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_quant_check.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_quickstart.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_recipes.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_registry.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_relora.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_replay.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_resume.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_review_fixes_v07133.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_rlvr.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_run_cost.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_runs.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_serve.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_server_generate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_simpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_sweep.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_tracker.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_training_speed.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_tui.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_ui.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_unsloth.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0420.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0450.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0490.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0510.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0520.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0530.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v05310.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v05311.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0532.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0533.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0534.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0535.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0536.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0537.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0538.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0539.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0540.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0550.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0560.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0580.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0590.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07110.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07111.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07112.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07113.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07114.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07115.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07116.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07117.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07118.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07119.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0712.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07120.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07121.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07122.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07123.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07124.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07125.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07126.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07127.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07128.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07129.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0713.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07130.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07131.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07132.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07133.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07134.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07135.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07136.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07137.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07138.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07139.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0714.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07140.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v07141.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0715.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0716.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0717.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0718.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_v0719.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_validator.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_vision.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_warmup.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_why.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.3}/tests/test_windows_encoding.py +0 -0
|
@@ -12,6 +12,71 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.72.3] - 2026-07-28
|
|
16
|
+
|
|
17
|
+
**Added — layer streaming breadth: more architectures, bigger batches, resume, and a
|
|
18
|
+
disk tier.**
|
|
19
|
+
|
|
20
|
+
Layer streaming (v0.72.0–.2) was deliberately narrow: Llama/Qwen only, batch 1, no
|
|
21
|
+
gradient accumulation, no resume, RAM only. This release lifts all of it, and each
|
|
22
|
+
capability was gated against a streamed-vs-resident bit-exactness reference before any
|
|
23
|
+
of it was written.
|
|
24
|
+
|
|
25
|
+
- **Six more model families.** `mistral`, `gemma`, `gemma2`, `gemma3_text`, `phi` and
|
|
26
|
+
`phi3` join the allowlist, each verified **bit-exact** against the same checkpoint
|
|
27
|
+
loaded resident, under both bf16 and NF4. Phi-3 is the notable one: it fuses Q/K/V
|
|
28
|
+
into a single `qkv_proj`, so there is no `q_proj` to find, and it is bit-exact anyway.
|
|
29
|
+
Multimodal `gemma3` is deliberately *not* accepted — only `gemma3_text`.
|
|
30
|
+
- **`batch_size` above 1, and gradient accumulation.** Both previously refused.
|
|
31
|
+
- **A pre-flight VRAM budget that accounts for batch and vocabulary.** Streaming bounds
|
|
32
|
+
the *weights*; activations and the logits tensor are untouched by it and both scale
|
|
33
|
+
with `batch × seq`. On a 152k-vocab model at batch 8 the logits term alone measured
|
|
34
|
+
**8.71 GB — 146× the entire layer-buffer pool**. `soup train` now predicts peak VRAM
|
|
35
|
+
and refuses a run that will not fit, naming the two knobs that scale it.
|
|
36
|
+
- **A throughput forecast**, quoted as a range from a GEMM ceiling measured on your own
|
|
37
|
+
card in that session, alongside the SM clock — never a compiled-in per-card constant.
|
|
38
|
+
- **`--resume` and `--hf-resume` work with streaming.**
|
|
39
|
+
- **A disk overflow tier.** `stream_source: auto` (the default) uses RAM when the base
|
|
40
|
+
fits and falls back to an NVMe disk tier when it does not, holding nothing resident.
|
|
41
|
+
`stream_source: ram` refuses instead of falling back. Non-NVMe disks are still
|
|
42
|
+
refused outright.
|
|
43
|
+
- **`soup doctor --disk`** reports the detected media type.
|
|
44
|
+
|
|
45
|
+
**Fixed**
|
|
46
|
+
|
|
47
|
+
- `estimate_logits_bytes` charged 6 bytes per logit element; the measured peak is **14**
|
|
48
|
+
(`transformers` holds the bf16 logits, the fp32 upcast, log-softmax's fp32 output and
|
|
49
|
+
the fp32 gradient live at once). The old figure under-predicted that term by 2.33×.
|
|
50
|
+
- Adapters could not be loaded *into* a streamed model: `load_state_dict` narrows keys
|
|
51
|
+
by child name, so a canonical checkpoint matched **0 of N** tensors and PEFT reported
|
|
52
|
+
only a warning — a resumed run reproduced the from-scratch loss curve exactly. The
|
|
53
|
+
streaming layer now redirects canonical keys at load time, mirroring the v0.72.1
|
|
54
|
+
save-side fix.
|
|
55
|
+
- The NVMe-only tier guard was wired to a hardcoded constant and could never fire.
|
|
56
|
+
- Streaming weight sources are now released when training ends **or raises**; the disk
|
|
57
|
+
tier holds one open shard handle per decoder layer.
|
|
58
|
+
- Subprocess helpers resolve tools to absolute paths (on Windows, `CreateProcess`
|
|
59
|
+
searches the current directory before `PATH`).
|
|
60
|
+
- The `[mcp]` extra is now capped at `mcp<2`. The SDK's 2.0.0 release removed
|
|
61
|
+
`mcp.shared.memory.create_connected_server_and_client_session` and dropped
|
|
62
|
+
`Server.list_tools`, breaking `soup mcp serve`'s round-trip tests for anyone
|
|
63
|
+
installing fresh. Support for the 2.x API is tracked separately.
|
|
64
|
+
|
|
65
|
+
**Known limitations**
|
|
66
|
+
|
|
67
|
+
- The **RAM-vs-disk performance gap is unmeasured** on the development hardware and no
|
|
68
|
+
number is claimed for it. safetensors memory-maps the shards, so the OS page cache
|
|
69
|
+
keeps them resident between steps on a machine with spare RAM, and at ~5 effective
|
|
70
|
+
TFLOPS the NVMe read hides under compute. The disk tier's *correctness* is verified
|
|
71
|
+
bit-exact against the RAM tier; its speed relative to RAM is not characterised.
|
|
72
|
+
- End-to-end `soup train --resume` could not be demonstrated on the development box:
|
|
73
|
+
`transformers` refuses `torch.load` below torch 2.6 (CVE-2025-32434), which blocks
|
|
74
|
+
**every** resume there, streaming or not. The streaming-specific half — the adapter
|
|
75
|
+
round-trip and loss continuity — is verified on the production CUDA path.
|
|
76
|
+
- Loading *into* a streamed model works; `named_parameters()` and `state_dict()` still
|
|
77
|
+
disagree in memory, which is the deliberate cost of a serialisation-only design.
|
|
78
|
+
- Layer streaming remains **BETA**.
|
|
79
|
+
|
|
15
80
|
## [0.72.2] - 2026-07-28
|
|
16
81
|
|
|
17
82
|
**Added — NF4 layer streaming: fine-tune Llama-3.1-8B on a 4 GB laptop GPU.**
|
|
@@ -120,7 +120,7 @@ src/soup_cli/
|
|
|
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 (330 files, 16977 tests)
|
|
124
124
|
examples/ - Real-world config examples and datasets
|
|
125
125
|
```
|
|
126
126
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: soup-cli
|
|
3
|
-
Version: 0.72.
|
|
3
|
+
Version: 0.72.3
|
|
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
|
|
@@ -29,7 +29,7 @@ Requires-Dist: bitsandbytes>=0.41.0; extra == 'all'
|
|
|
29
29
|
Requires-Dist: datasets>=2.14.0; extra == 'all'
|
|
30
30
|
Requires-Dist: datasketch>=1.6.0; extra == 'all'
|
|
31
31
|
Requires-Dist: fastapi>=0.104.0; extra == 'all'
|
|
32
|
-
Requires-Dist: mcp
|
|
32
|
+
Requires-Dist: mcp<2,>=1.2.0; extra == 'all'
|
|
33
33
|
Requires-Dist: peft>=0.7.0; extra == 'all'
|
|
34
34
|
Requires-Dist: torch>=2.0.0; extra == 'all'
|
|
35
35
|
Requires-Dist: transformers<5.0.0,>=4.36.0; extra == 'all'
|
|
@@ -61,7 +61,7 @@ Requires-Dist: bitsandbytes>=0.41.0; extra == 'dev'
|
|
|
61
61
|
Requires-Dist: cryptography>=41.0.0; extra == 'dev'
|
|
62
62
|
Requires-Dist: datasets>=2.14.0; extra == 'dev'
|
|
63
63
|
Requires-Dist: httpx>=0.24.0; extra == 'dev'
|
|
64
|
-
Requires-Dist: mcp
|
|
64
|
+
Requires-Dist: mcp<2,>=1.2.0; extra == 'dev'
|
|
65
65
|
Requires-Dist: mypy>=1.8.0; extra == 'dev'
|
|
66
66
|
Requires-Dist: peft>=0.7.0; extra == 'dev'
|
|
67
67
|
Requires-Dist: pre-commit>=3.5.0; extra == 'dev'
|
|
@@ -83,7 +83,7 @@ Requires-Dist: auto-gptq>=0.7.0; extra == 'gptq'
|
|
|
83
83
|
Provides-Extra: liger
|
|
84
84
|
Requires-Dist: liger-kernel>=0.3.0; extra == 'liger'
|
|
85
85
|
Provides-Extra: mcp
|
|
86
|
-
Requires-Dist: mcp
|
|
86
|
+
Requires-Dist: mcp<2,>=1.2.0; extra == 'mcp'
|
|
87
87
|
Provides-Extra: mix
|
|
88
88
|
Requires-Dist: scikit-optimize>=0.9.0; extra == 'mix'
|
|
89
89
|
Provides-Extra: mlx
|
|
@@ -193,31 +193,34 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
193
193
|
|
|
194
194
|
## What's New
|
|
195
195
|
|
|
196
|
-
**v0.72.
|
|
197
|
-
streaming keeps the frozen base
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
- **
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
- **
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
- **
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
196
|
+
**v0.72.3 — layer streaming grows up: more models, bigger batches, resume, and a disk
|
|
197
|
+
tier.** Layer streaming keeps the frozen base out of VRAM and feeds it to the GPU one
|
|
198
|
+
decoder layer at a time. v0.72.0–.2 kept the scope deliberately tiny to prove it worked;
|
|
199
|
+
this release removes the training wheels.
|
|
200
|
+
|
|
201
|
+
- **Six more model families** — Mistral, Gemma / Gemma 2 / Gemma 3, and Phi / Phi-3 — each
|
|
202
|
+
verified **bit-exact** against the same checkpoint loaded resident, in bf16 *and* NF4.
|
|
203
|
+
- **`batch_size` above 1, gradient accumulation, and `--resume`** all work now.
|
|
204
|
+
- **A pre-flight that predicts peak VRAM and refuses a run that will not fit.** Streaming
|
|
205
|
+
bounds the *weights*; the logits tensor is not bounded by it and scales with
|
|
206
|
+
`batch × seq`. On a 152k-vocab model at batch 8 that single tensor measured **8.71 GB —
|
|
207
|
+
146× the entire layer-buffer pool.** The prediction was fitted to ten real runs and
|
|
208
|
+
never under-predicts any of them.
|
|
209
|
+
- **A throughput forecast measured on your card, in your session**, quoted as a range
|
|
210
|
+
next to the SM clock it was taken at — not a number compiled into the source.
|
|
211
|
+
- **A disk overflow tier.** When the base will not fit in RAM, `stream_source: auto`
|
|
212
|
+
streams it from NVMe instead of refusing. Honest caveat: its *correctness* is verified
|
|
213
|
+
bit-exact against the RAM tier, but **how much slower it is has not been measured** on
|
|
214
|
+
the development hardware, and no figure is claimed.
|
|
215
|
+
- Still BETA.
|
|
214
216
|
|
|
215
217
|
```yaml
|
|
216
218
|
# soup.yaml — then just `soup train --config soup.yaml`
|
|
217
219
|
training:
|
|
218
|
-
stream_layers: true # base streams
|
|
220
|
+
stream_layers: true # base streams out of VRAM; only the adapter trains
|
|
219
221
|
quantization: 4bit # NF4 — ~4x smaller store, so 8B fits a 4 GB card
|
|
220
|
-
batch_size:
|
|
222
|
+
batch_size: 4 # v0.72.3: bigger batches amortise the weight read
|
|
223
|
+
stream_source: auto # RAM when it fits, NVMe disk when it does not
|
|
221
224
|
```
|
|
222
225
|
|
|
223
226
|
> **Trained with `stream_layers: true` on v0.72.0?** That adapter is inert — its tensors were
|
|
@@ -49,31 +49,34 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
49
49
|
|
|
50
50
|
## What's New
|
|
51
51
|
|
|
52
|
-
**v0.72.
|
|
53
|
-
streaming keeps the frozen base
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
- **
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
- **
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
- **
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
52
|
+
**v0.72.3 — layer streaming grows up: more models, bigger batches, resume, and a disk
|
|
53
|
+
tier.** Layer streaming keeps the frozen base out of VRAM and feeds it to the GPU one
|
|
54
|
+
decoder layer at a time. v0.72.0–.2 kept the scope deliberately tiny to prove it worked;
|
|
55
|
+
this release removes the training wheels.
|
|
56
|
+
|
|
57
|
+
- **Six more model families** — Mistral, Gemma / Gemma 2 / Gemma 3, and Phi / Phi-3 — each
|
|
58
|
+
verified **bit-exact** against the same checkpoint loaded resident, in bf16 *and* NF4.
|
|
59
|
+
- **`batch_size` above 1, gradient accumulation, and `--resume`** all work now.
|
|
60
|
+
- **A pre-flight that predicts peak VRAM and refuses a run that will not fit.** Streaming
|
|
61
|
+
bounds the *weights*; the logits tensor is not bounded by it and scales with
|
|
62
|
+
`batch × seq`. On a 152k-vocab model at batch 8 that single tensor measured **8.71 GB —
|
|
63
|
+
146× the entire layer-buffer pool.** The prediction was fitted to ten real runs and
|
|
64
|
+
never under-predicts any of them.
|
|
65
|
+
- **A throughput forecast measured on your card, in your session**, quoted as a range
|
|
66
|
+
next to the SM clock it was taken at — not a number compiled into the source.
|
|
67
|
+
- **A disk overflow tier.** When the base will not fit in RAM, `stream_source: auto`
|
|
68
|
+
streams it from NVMe instead of refusing. Honest caveat: its *correctness* is verified
|
|
69
|
+
bit-exact against the RAM tier, but **how much slower it is has not been measured** on
|
|
70
|
+
the development hardware, and no figure is claimed.
|
|
71
|
+
- Still BETA.
|
|
70
72
|
|
|
71
73
|
```yaml
|
|
72
74
|
# soup.yaml — then just `soup train --config soup.yaml`
|
|
73
75
|
training:
|
|
74
|
-
stream_layers: true # base streams
|
|
76
|
+
stream_layers: true # base streams out of VRAM; only the adapter trains
|
|
75
77
|
quantization: 4bit # NF4 — ~4x smaller store, so 8B fits a 4 GB card
|
|
76
|
-
batch_size:
|
|
78
|
+
batch_size: 4 # v0.72.3: bigger batches amortise the weight read
|
|
79
|
+
stream_source: auto # RAM when it fits, NVMe disk when it does not
|
|
77
80
|
```
|
|
78
81
|
|
|
79
82
|
> **Trained with `stream_layers: true` on v0.72.0?** That adapter is inert — its tensors were
|
|
@@ -30,7 +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; quantization: 4bit streams it as NF4, ~4x smaller (sft/transformers/text,
|
|
33
|
+
soup train --config sft.yaml # training.stream_layers: true [stream_source stream_buffers] BETA layer streaming — the frozen base streams from CPU RAM/NVMe one decoder layer at a time, so peak VRAM is bounded by ONE layer; quantization: 4bit streams it as NF4, ~4x smaller (sft/transformers/text, wider archs) (v0.72.0; NF4 v0.72.2; disk+batch+accum v0.72.3)
|
|
34
34
|
soup export --model ./output --format gguf Export to GGUF (Ollama)
|
|
35
35
|
soup export --model ./output --deploy ollama Export GGUF + auto-deploy to Ollama
|
|
36
36
|
soup export --model ./output --format onnx Export to ONNX
|
|
@@ -200,7 +200,7 @@ soup tokenizer train --input c.jsonl --vocab-size N Train BPE tokenizer (v0.53.
|
|
|
200
200
|
soup bench <model> --p50 --p95 Bench with tail-latency percentiles (v0.53.9)
|
|
201
201
|
soup bench <model> --backend auto Auto-detect transformers/mlx backend (v0.53.9)
|
|
202
202
|
soup serve --reasoning-parser deepseek-r1 Strip <think> blocks from responses (v0.53.9)
|
|
203
|
-
soup doctor [--nccl]
|
|
203
|
+
soup doctor [--nccl] [--disk] Check environment (optionally check NCCL bandwidth, media type; --disk ~9s cold / ~2.4s warm)
|
|
204
204
|
soup quickstart [--dry-run] Full demo
|
|
205
205
|
soup adapters scan <adapter> Spectral backdoor scan (rank-1 dominance + outlier detection)
|
|
206
206
|
soup adapters sign <adapter> [--backend unsigned|ed25519] [--key <pem>|--generate-key <pem>] Merkle manifest + ed25519 sign
|
|
@@ -14,7 +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; NF4 v0.72.2)](#layer-streaming-beta-v0720-nf4-v0722)
|
|
17
|
+
- [Layer Streaming (BETA, v0.72.0; NF4 v0.72.2; disk + wider archs v0.72.3)](#layer-streaming-beta-v0720-nf4-v0722-disk--wider-archs-v0723)
|
|
18
18
|
- [Correctness First (v0.36.0)](#correctness-first-v0360)
|
|
19
19
|
- [Multi-GPU / DeepSpeed / FSDP](#multi-gpu--deepspeed--fsdp)
|
|
20
20
|
- [Performance + Long-Context](#performance--long-context)
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
- [MoE Expert Quantization + Router-Only Training (live in v0.71.20)](#moe-expert-quantization--router-only-training-live-in-v07120)
|
|
25
25
|
- [Unsloth Dynamic 2.0 GGUF Ladder (v0.53.0)](#unsloth-dynamic-20-gguf-ladder-v0530)
|
|
26
26
|
- [KV Cache Types (v0.53.0)](#kv-cache-types-v0530)
|
|
27
|
-
- [FP8 Attention + NVFP4 + Native `unsloth_bnb_4bit` (v0.53.0)](#fp8-attention--nvfp4--native-unsloth_bnb_4bit
|
|
27
|
+
- [FP8 Attention + NVFP4 + Native `unsloth_bnb_4bit` (v0.53.0)](#fp8-attention--nvfp4--native-unsloth_bnb_4bit)
|
|
28
28
|
- [LF / Axolotl Quant Parity (v0.53.0)](#lf--axolotl-quant-parity-v0530)
|
|
29
29
|
- [Advanced Save Formats (v0.53.0)](#advanced-save-formats-v0530)
|
|
30
30
|
- [Quant Menu II + Export Pipeline (v0.53.1)](#quant-menu-ii--export-pipeline-v0531)
|
|
@@ -226,7 +226,7 @@ training:
|
|
|
226
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).
|
|
227
227
|
|
|
228
228
|
|
|
229
|
-
## Layer Streaming (BETA, v0.72.0; NF4 v0.72.2)
|
|
229
|
+
## Layer Streaming (BETA, v0.72.0; NF4 v0.72.2; disk + wider archs v0.72.3)
|
|
230
230
|
|
|
231
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
232
|
|
|
@@ -272,26 +272,81 @@ Correctness is not a tradeoff here either: a streamed NF4 run is **bit-exact** a
|
|
|
272
272
|
|
|
273
273
|
The 3B NF4-vs-bf16 rows differ by 1.85×, but attribute that to **pinning, not arithmetic** — see point 2 above. The two rows also come from different sessions, and this card's boost clock varies ~13% between sessions, so treat the factor as indicative and the mechanism as the claim.
|
|
274
274
|
|
|
275
|
-
Untied `embed_tokens` + `lm_head` stay resident and unquantised (2.10 GB of the 8B row's 3.32 GB), which is why 8B sits close to this card's ceiling; treating them as streamed large layers is
|
|
275
|
+
Untied `embed_tokens` + `lm_head` stay resident and unquantised (2.10 GB of the 8B row's 3.32 GB), which is why 8B sits close to this card's ceiling; treating them as streamed large layers is deferred beyond v0.72.3.
|
|
276
276
|
|
|
277
277
|
**Honest scope:**
|
|
278
|
-
- **RAM tier
|
|
279
|
-
- **Llama / Qwen
|
|
280
|
-
-
|
|
278
|
+
- **RAM tier + disk overflow (v0.72.3).** `stream_source: auto` picks RAM when it fits, falls back to NVMe disk when not; SATA/HDD rejected. Correctness verified; disk performance unmeasured on the reference box.
|
|
279
|
+
- **Llama / Qwen / Mistral / Gemma / Gemma2 / Gemma3-Text / Phi / Phi3** (all verified bit-exact in bf16 and NF4), `task: sft`, `backend: transformers`, `modality: text`.
|
|
280
|
+
- **Batch sizes, gradient accumulation, `--resume` / `--hf-resume`** all now work (v0.72.3).
|
|
281
281
|
- **The bf16 3B throughput above 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. NF4 lifts this at 3B: the store drops under the ceiling and pins.
|
|
282
282
|
- 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.
|
|
283
283
|
|
|
284
|
+
### Sizing a streaming run (v0.72.3)
|
|
285
|
+
|
|
286
|
+
Streaming bounds the **weights**. It does nothing for activations or for the logits
|
|
287
|
+
tensor, and both scale with `batch × seq`. On a large-vocabulary model that second term
|
|
288
|
+
dominates everything else: measured on Qwen2.5-0.5B (vocab 151 936) at batch 8, S=512,
|
|
289
|
+
the logits alone are **8.71 GB — 146× the entire layer-buffer pool (0.060 GB)**. A
|
|
290
|
+
pre-flight that budgeted only weights and buffers would wave that configuration through.
|
|
291
|
+
|
|
292
|
+
So `soup train` predicts peak VRAM before building the model, and **refuses a run it
|
|
293
|
+
expects not to fit**:
|
|
294
|
+
|
|
295
|
+
```
|
|
296
|
+
peak VRAM ~0.48 GB at batch 2 x seq 256 (logits 0.35 GB)
|
|
297
|
+
free VRAM 3.46 GB
|
|
298
|
+
forecast 5685-8361 tok/s — a compute-bound bound, not a promise
|
|
299
|
+
(from 6.75 TFLOPS measured on this card now @ 862 MHz)
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
The prediction was fitted to ten real runs across two models, a 3.1× vocabulary contrast,
|
|
303
|
+
batch 1–8 and two sequence lengths: **worst error 0.85%, and it never under-predicts** —
|
|
304
|
+
the only safe direction for a number allowed to stop a run. The refusal names the two
|
|
305
|
+
knobs that actually scale it (`training.batch_size`, `data.max_length`).
|
|
306
|
+
|
|
307
|
+
Refusing rather than warning is deliberate. On Linux an over-budget step is a hard OOM.
|
|
308
|
+
On Windows it is worse: WDDM silently spills to host memory and the run merely becomes an
|
|
309
|
+
order of magnitude slower — measured here as a 9.27 GB peak on a 4.29 GB card with **no
|
|
310
|
+
exception raised at all**. Read as "streaming is slow", that would be exactly the wrong
|
|
311
|
+
conclusion.
|
|
312
|
+
|
|
313
|
+
The throughput line is a **bound, not a promise**. It comes from a bf16 GEMM benchmarked
|
|
314
|
+
on your card in that session and is printed with the SM clock it was taken at, because
|
|
315
|
+
this card alone produced 3.5 and 7.6 TFLOPS in two sessions at the same reported clock. A
|
|
316
|
+
per-card constant compiled into Soup would be a fabrication. Real streamed runs landed at
|
|
317
|
+
68–100% of their measured ceiling.
|
|
318
|
+
|
|
319
|
+
### Batch size vs gradient accumulation
|
|
320
|
+
|
|
321
|
+
Both work from v0.72.3, and they are not interchangeable. Measured on Qwen2.5-0.5B bf16,
|
|
322
|
+
S=256, pinned store, 50 steps after 10 warm-up:
|
|
323
|
+
|
|
324
|
+
| batch | accum | effective batch | throughput | peak VRAM |
|
|
325
|
+
|---|---|---|---|---|
|
|
326
|
+
| 1 | 1 | 1 | 556.6 tok/s | 0.842 GB |
|
|
327
|
+
| 1 | 4 | 4 | 540.1 tok/s | 0.846 GB |
|
|
328
|
+
| 4 | 1 | 4 | **1378.0 tok/s** | 2.28 GB |
|
|
329
|
+
|
|
330
|
+
Accumulation is **per-token I/O-neutral** — layer reads per 1000 tokens held constant
|
|
331
|
+
across accum 1, 2 and 4, because `accum=N` re-reads the base N times *and* processes N
|
|
332
|
+
times the tokens. Its cost is opportunity cost: at the **same effective batch of 4**,
|
|
333
|
+
raising `batch_size` instead was **2.52× faster**, because one weight read is amortised
|
|
334
|
+
over four times the tokens.
|
|
335
|
+
|
|
336
|
+
What accumulation buys is effective batch at **constant VRAM** (0.842 → 0.846 GB across
|
|
337
|
+
accum 1→4, where raising batch cost 0.842 → 2.28 GB). So the rule is: **raise
|
|
338
|
+
`batch_size` until the VRAM pre-flight refuses, then accumulate for the rest.** Soup
|
|
339
|
+
prints this advice when it sees you accumulating.
|
|
340
|
+
|
|
284
341
|
**Rejected at config load (each names the release that lifts it):**
|
|
285
|
-
- `
|
|
342
|
+
- `batch_size: "auto"` → OOM-probes a resident model that streaming never loads; explicit batch sizes allowed (v0.72.3)
|
|
286
343
|
- `quantization` other than `none` or `4bit` → other formats cannot be streamed into a pooled buffer
|
|
287
344
|
- `backend: unsloth` / `backend: mlx` → streaming replaces the model-load path those backends own
|
|
288
345
|
- `task` other than `sft` → preference losses are v0.72.4
|
|
289
|
-
- `gradient_accumulation_steps > 1` → every micro-batch re-reads the whole base, so accumulation multiplies streaming IO linearly (v0.72.3)
|
|
290
|
-
- `batch_size` other than `1` → v0.72.3
|
|
291
346
|
- `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
|
|
292
347
|
- `unfrozen_parameters`, `lisa_enabled`, `packing`, `multipack`, `use_fsdp2_compile`, `train_router_only`, `expand_layers` → each independently rewrites or re-freezes the same layers
|
|
293
348
|
- `stream_source` / `stream_buffers` set while `stream_layers: false` → a footgun, refused
|
|
294
|
-
- an architecture outside
|
|
349
|
+
- an architecture outside the supported list (llama / qwen2 / qwen3 / mistral / gemma / gemma2 / gemma3_text / phi / phi3) → named explicitly
|
|
295
350
|
|
|
296
351
|
**Config example:**
|
|
297
352
|
|
|
@@ -309,12 +364,12 @@ data:
|
|
|
309
364
|
training:
|
|
310
365
|
epochs: 3
|
|
311
366
|
lr: 2e-5
|
|
312
|
-
batch_size: 1 #
|
|
313
|
-
gradient_accumulation_steps: 1 #
|
|
367
|
+
batch_size: 1 # explicit sizes allowed; "auto" rejected
|
|
368
|
+
gradient_accumulation_steps: 1 # values > 1 now allowed (v0.72.3)
|
|
314
369
|
quantization: 4bit # NF4 — ~4x smaller RAM store than bf16 (or `none`)
|
|
315
370
|
gradient_checkpointing: true # handled per-layer by the streamer
|
|
316
371
|
stream_layers: true # Enable layer streaming
|
|
317
|
-
stream_source: auto # RAM-
|
|
372
|
+
stream_source: auto # RAM with auto-fallback to NVMe disk (v0.72.3)
|
|
318
373
|
stream_buffers: 2 # double-buffering
|
|
319
374
|
lora:
|
|
320
375
|
r: 64
|
|
@@ -5,9 +5,10 @@
|
|
|
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
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,
|
|
9
|
-
> layer instead of the whole model
|
|
10
|
-
>
|
|
8
|
+
> frozen base from CPU RAM (with NVMe disk overflow in v0.72.3) one decoder layer at a time,
|
|
9
|
+
> so peak VRAM is bounded by one layer instead of the whole model. Add `quantization: 4bit`
|
|
10
|
+
> and an 8B base fits a 4 GB card — see
|
|
11
|
+
> [Layer Streaming](performance-and-quantization.md#layer-streaming-beta-v0720-nf4-v0722-disk--wider-archs-v0723).
|
|
11
12
|
|
|
12
13
|
**Contents:**
|
|
13
14
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "soup-cli"
|
|
7
|
-
version = "0.72.
|
|
7
|
+
version = "0.72.3"
|
|
8
8
|
description = "Fine-tune and post-train LLMs in one command. No SSH, no config hell."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
@@ -105,7 +105,14 @@ modal = ["modal>=0.60.0"]
|
|
|
105
105
|
# v0.71.28 - `soup mcp serve` MCP server. The official `mcp` python SDK is
|
|
106
106
|
# lazy-imported (only src/soup_cli/mcp_server/server.py touches it), so the CLI
|
|
107
107
|
# stays light without it. Floor pinned to guard against SDK API churn.
|
|
108
|
-
|
|
108
|
+
#
|
|
109
|
+
# v0.72.3: capped below 2.0. The floor alone was not enough — mcp 2.0.0 removed
|
|
110
|
+
# `mcp.shared.memory.create_connected_server_and_client_session` and dropped
|
|
111
|
+
# `Server.list_tools`, which broke every `soup mcp serve` round-trip test on all
|
|
112
|
+
# nine CI jobs the day it was published. 1.29.0 (the newest 1.x) still exposes
|
|
113
|
+
# both, verified directly. Migrating to the 2.x API is its own piece of work,
|
|
114
|
+
# and shipping against a major nobody has validated is not a substitute for it.
|
|
115
|
+
mcp = ["mcp>=1.2.0,<2"]
|
|
109
116
|
|
|
110
117
|
[project.scripts]
|
|
111
118
|
soup = "soup_cli.cli:run"
|
|
@@ -56,6 +56,15 @@ def doctor(
|
|
|
56
56
|
nccl: bool = typer.Option(
|
|
57
57
|
False, "--nccl", help="Measure NCCL bandwidth and check against reference table."
|
|
58
58
|
),
|
|
59
|
+
disk: bool = typer.Option(
|
|
60
|
+
False,
|
|
61
|
+
"--disk",
|
|
62
|
+
help=(
|
|
63
|
+
"Detect the disk media type (NVMe / SSD / HDD). Layer streaming's "
|
|
64
|
+
"disk overflow tier needs NVMe. Off by default: the probe costs ~9 s "
|
|
65
|
+
"on Windows."
|
|
66
|
+
),
|
|
67
|
+
),
|
|
59
68
|
):
|
|
60
69
|
"""Check system dependencies, GPU, and compatibility."""
|
|
61
70
|
console.print("[bold]Soup Doctor[/] - checking your environment...\n")
|
|
@@ -75,7 +84,7 @@ def doctor(
|
|
|
75
84
|
_check_gpu()
|
|
76
85
|
|
|
77
86
|
# Resources check
|
|
78
|
-
_check_resources()
|
|
87
|
+
_check_resources(probe_disk=disk)
|
|
79
88
|
|
|
80
89
|
# Dependencies table
|
|
81
90
|
table = Table(title="Dependencies")
|
|
@@ -367,7 +376,7 @@ def _get_ram_gb() -> str:
|
|
|
367
376
|
return "Unknown"
|
|
368
377
|
|
|
369
378
|
|
|
370
|
-
def _check_resources():
|
|
379
|
+
def _check_resources(probe_disk: bool = False):
|
|
371
380
|
"""Check RAM and Disk space and display info."""
|
|
372
381
|
import shutil
|
|
373
382
|
|
|
@@ -384,6 +393,32 @@ def _check_resources():
|
|
|
384
393
|
disk_str = "Unknown"
|
|
385
394
|
|
|
386
395
|
table.add_row("Disk", disk_str)
|
|
396
|
+
|
|
397
|
+
# v0.72.3 — layer streaming's disk overflow tier needs NVMe: on a spinning
|
|
398
|
+
# disk each step costs 2 seeks per layer (plan P11), which does not merely
|
|
399
|
+
# run slower, it thrashes. Reported here so the refusal is not the first
|
|
400
|
+
# time an operator hears about it.
|
|
401
|
+
#
|
|
402
|
+
# Opt-in behind --disk, matching this command's own --nccl convention for
|
|
403
|
+
# expensive probes. Measured on the dev box: the Windows PowerShell query
|
|
404
|
+
# costs ~9 s cold and ~2.4 s warm (17.6 s -> 20.0 s on `soup doctor`), paid
|
|
405
|
+
# by every user including the majority who never touch layer streaming. A
|
|
406
|
+
# streaming run does its own lazy probe when the tier decision actually
|
|
407
|
+
# depends on the answer, so nothing is lost by defaulting this off.
|
|
408
|
+
if probe_disk:
|
|
409
|
+
try:
|
|
410
|
+
from soup_cli.utils.layer_stream import detect_disk_kind
|
|
411
|
+
|
|
412
|
+
kind = detect_disk_kind(".")
|
|
413
|
+
except Exception: # noqa: BLE001 — a diagnostic must never crash the report
|
|
414
|
+
kind = "unknown"
|
|
415
|
+
verdict = {
|
|
416
|
+
"nvme": "[green]NVMe[/] — layer streaming can use the disk overflow tier",
|
|
417
|
+
"ssd": "[yellow]SATA SSD[/] — layer streaming refuses the disk tier (RAM only)",
|
|
418
|
+
"hdd": "[red]HDD[/] — layer streaming refuses the disk tier (RAM only)",
|
|
419
|
+
}.get(kind, "[yellow]Unknown[/] — layer streaming will refuse the disk tier")
|
|
420
|
+
table.add_row("Disk type", verdict)
|
|
421
|
+
|
|
387
422
|
console.print(table)
|
|
388
423
|
console.print()
|
|
389
424
|
|
|
@@ -530,23 +530,13 @@ def train(
|
|
|
530
530
|
console.print(f"[red]{markup_escape(str(exc))}[/]")
|
|
531
531
|
raise typer.Exit(code=2) from exc
|
|
532
532
|
|
|
533
|
-
#
|
|
534
|
-
#
|
|
535
|
-
#
|
|
536
|
-
#
|
|
537
|
-
#
|
|
538
|
-
#
|
|
539
|
-
#
|
|
540
|
-
# pushed checkpoint now carries canonical keys while a live streamed model
|
|
541
|
-
# is still `.inner.`-shaped, so PEFT's strict=False load would match
|
|
542
|
-
# NOTHING and silently continue with a freshly initialised adapter.
|
|
543
|
-
if (resume or hf_resume) and cfg.training.stream_layers:
|
|
544
|
-
console.print(
|
|
545
|
-
"[red]--resume / --hf-resume are not supported with "
|
|
546
|
-
"training.stream_layers[/] — checkpoint/resume for layer streaming "
|
|
547
|
-
"lands in v0.72.3. Drop the flag, or set stream_layers: false."
|
|
548
|
-
)
|
|
549
|
-
raise typer.Exit(code=2)
|
|
533
|
+
# v0.72.3 — --resume / --hf-resume now work with layer streaming. v0.72.0-.2
|
|
534
|
+
# refused them because a streamed model's `named_parameters()` carry an
|
|
535
|
+
# `.inner.` segment that `load_state_dict` narrows away, so PEFT matched
|
|
536
|
+
# NOTHING and silently continued with a freshly initialised adapter (measured:
|
|
537
|
+
# 0 of 12 tensors, and a resumed loss curve byte-identical to a from-scratch
|
|
538
|
+
# one). `StreamedDecoderLayer` now redirects canonical keys at load time,
|
|
539
|
+
# mirroring the v0.72.1 save-side delegation.
|
|
550
540
|
|
|
551
541
|
# --- RA-DIT generator-stage auto-link (v0.71.10 #200) ---
|
|
552
542
|
# When a generator stage has no retriever model set, splice in the latest
|
|
@@ -4682,23 +4682,30 @@ class SoupConfig(BaseModel):
|
|
|
4682
4682
|
f"store weights in formats that cannot be streamed into a "
|
|
4683
4683
|
f"pooled buffer."
|
|
4684
4684
|
)
|
|
4685
|
-
|
|
4686
|
-
|
|
4687
|
-
|
|
4688
|
-
|
|
4689
|
-
|
|
4690
|
-
|
|
4691
|
-
|
|
4692
|
-
|
|
4693
|
-
|
|
4694
|
-
|
|
4695
|
-
|
|
4696
|
-
|
|
4697
|
-
|
|
4698
|
-
|
|
4699
|
-
|
|
4700
|
-
|
|
4701
|
-
|
|
4685
|
+
# v0.72.3: the disk overflow tier is live. It is still NVMe-only —
|
|
4686
|
+
# `choose_tier` refuses spinning disks, where each step costs two seeks
|
|
4687
|
+
# per layer (plan P11) and the run thrashes rather than merely running
|
|
4688
|
+
# slower. `soup doctor` reports the detected media type.
|
|
4689
|
+
# v0.72.3: any concrete batch size is supported — bigger batches are
|
|
4690
|
+
# where streaming PAYS OFF, since one weight read is amortised over more
|
|
4691
|
+
# tokens. "auto" is still refused: it resolves by OOM-probing a resident
|
|
4692
|
+
# model, and under streaming that model never loads, so the probe would
|
|
4693
|
+
# measure something that does not exist.
|
|
4694
|
+
if tcfg.batch_size == "auto":
|
|
4695
|
+
raise ValueError(
|
|
4696
|
+
"training.stream_layers cannot use batch_size='auto': the probe "
|
|
4697
|
+
"sizes a RESIDENT model, which a streaming run never loads. Set "
|
|
4698
|
+
"a concrete batch_size — the pre-flight predicts peak VRAM for "
|
|
4699
|
+
"it and refuses the run if it will not fit."
|
|
4700
|
+
)
|
|
4701
|
+
# v0.72.3: accumulation is supported. Measured on this box, it is
|
|
4702
|
+
# per-TOKEN I/O-neutral — layer reads per 1k tokens held constant across
|
|
4703
|
+
# accum 1/2/4 — because N micro-batches read the base N times but also
|
|
4704
|
+
# process N times the tokens. Its cost is opportunity cost: reaching the
|
|
4705
|
+
# same effective batch by raising batch_size was 2.52x faster. The
|
|
4706
|
+
# pre-flight says so rather than the schema refusing it, because
|
|
4707
|
+
# accumulation is the ONLY way to raise effective batch once the VRAM
|
|
4708
|
+
# budget is exhausted (peak moved 0.842 -> 0.846 GB across accum 1->4).
|
|
4702
4709
|
if tcfg.lora.r < 1:
|
|
4703
4710
|
raise ValueError(
|
|
4704
4711
|
"training.stream_layers requires LoRA (training.lora.r >= 1) — "
|