soup-cli 0.72.0__tar.gz → 0.72.1__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.0 → soup_cli-0.72.1}/CHANGELOG.md +50 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/CONTRIBUTING.md +1 -1
- {soup_cli-0.72.0 → soup_cli-0.72.1}/PKG-INFO +20 -8
- {soup_cli-0.72.0 → soup_cli-0.72.1}/README.md +19 -7
- {soup_cli-0.72.0 → soup_cli-0.72.1}/docs/performance-and-quantization.md +26 -17
- {soup_cli-0.72.0 → soup_cli-0.72.1}/pyproject.toml +1 -1
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/train.py +12 -5
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/config/schema.py +6 -6
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/sft.py +2 -2
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/layer_stream.py +3 -3
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/layer_stream_runtime.py +44 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07200.py +6 -6
- soup_cli-0.72.1/tests/test_v07201.py +510 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/.dockerignore +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/.github/FUNDING.yml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/.github/pull_request_template.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/.gitignore +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/.mailmap +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/AGENTS.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/CODEOWNERS +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/CONTRIBUTORS.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/Dockerfile +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/LICENSE +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/NOTICE +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/SECURITY.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/docker-compose.yml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/docs/README.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/docs/adapters-and-governance.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/docs/backends-and-ops.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/docs/commands.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/docs/compliance.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/docs/data.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/docs/evaluation.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/docs/models.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/docs/peft-and-efficiency.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/docs/serving-and-export.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/docs/training.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/examples/README.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/examples/reward_hacking/rewards.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/soup.png +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/soup_logo_svg.svg +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/cli.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/cloud/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/cloud/modal.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/_eval_v0650.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/_eval_v07110.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/adapters.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/advise.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/card.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/ci.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/data.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/data_canary.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/data_doctor.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/data_topics.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/diagnose.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/draft.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/mcp.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/ra_dit.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/reward.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/serve.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/ship.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/shrink.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/spectrum.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/_fixtures/gate/format_json.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/_fixtures/gate/safety.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/_fixtures/gate/tool_call.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/loader.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/envs/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/envs/_common.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/envs/calculator.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/envs/guess_number.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/envs/retrieval_qa.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/eval/gate_suites.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/mcp_server/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/mcp_server/registry.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/mcp_server/server.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/recipes/catalog.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/registry/store.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/eu-ai-act.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/hipaa.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/soc2.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/sr-11-7.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/asr.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/bitnet.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/grpo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/mole_routing.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/online_dpo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/ppo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/raft.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/tts.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/ui/app.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/adapter_arithmetic.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/adapter_fuse.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/advise.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/agent_sandbox.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/asr_metrics.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/best_of_n.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/canary.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/ci_workflow.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/data_doctor.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/data_lint.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/diagnose/citation.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/diagnose/live.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/draft.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/edit_kernels.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/embed.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/evolve.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/harm_probe.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/hubs.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/interference_live.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/layer_shard.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/lisa.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/live_eval.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/mod.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/peft_wiring.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/prm_reward.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/probe_kernel.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/ra_dit_run.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/raft.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/rehearsal.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/reward_hack_control.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/reward_stress.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/reward_synth.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/rl_checkpoint.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/semdedup.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/ship_verdict.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/shrink.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/spectrum_scan.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/topics.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/truth_probe.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/tts_codec.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/unlearn_kernels.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/templates/chat.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/templates/code.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/templates/medical.yaml +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/__init__.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/conftest.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/qa/v07114_qa.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_adapters.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_audio.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_autopilot.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_bco.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_bench.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_build_dag.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_callback.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_cans.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_chat.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_chat_template.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_cli.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_code_review_critical.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_code_review_deferred.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_code_review_high.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_code_review_medium_low.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_code_review_recurring.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_config.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_cost.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_curriculum.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_data.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_data_augment.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_data_sample.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_data_split.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_data_tools.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_diff.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_display.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_doctor.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_embedding.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_errors.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_eval.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_export.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_formats.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_generate.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_gpu.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_grpo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_infer.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_init.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_ipo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_issue300_online_dpo_train.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_issue302_vision_pad_token.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_issue305_mixed_rank_arithmetic.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_issue308_callback_subclass.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_kto.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_loader.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_log_level.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_merge.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_migrate.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_moe.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_orpo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_packing.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_part_a_wave1.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_part_d.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_part_e.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_performance.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_ppo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_pretrain.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_profile.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_profiling.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_progress.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_push.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_qat.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_quant_check.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_quickstart.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_recipes.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_registry.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_relora.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_replay.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_resume.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_review_fixes_v07133.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_rlvr.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_run_cost.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_runs.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_serve.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_server_generate.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_simpo.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_sweep.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_tracker.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_training_speed.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_tui.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_ui.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_unsloth.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0420.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0450.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0490.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0510.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0520.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0530.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v05310.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v05311.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0532.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0533.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0534.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0535.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0536.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0537.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0538.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0539.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0540.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0550.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0560.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0580.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0590.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07110.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07111.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07112.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07113.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07114.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07115.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07116.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07117.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07118.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07119.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0712.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07120.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07121.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07122.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07123.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07124.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07125.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07126.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07127.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07128.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07129.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0713.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07130.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07131.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07132.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07133.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07134.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07135.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07136.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07137.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07138.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07139.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0714.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07140.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v07141.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0715.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0716.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0717.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0718.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_v0719.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_validator.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_vision.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_warmup.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_why.py +0 -0
- {soup_cli-0.72.0 → soup_cli-0.72.1}/tests/test_windows_encoding.py +0 -0
|
@@ -12,8 +12,58 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.72.1] - 2026-07-27
|
|
16
|
+
|
|
17
|
+
**Fixed — layer-streaming adapters were saved in an unloadable form.** If you
|
|
18
|
+
trained with `stream_layers: true` on v0.72.0, the adapter that run wrote is
|
|
19
|
+
**inert**: every tensor was saved under a key containing an extra `.inner.`
|
|
20
|
+
segment, so `soup merge`, `soup serve`, `soup chat` and
|
|
21
|
+
`PeftModel.from_pretrained` all loaded **zero** adapter tensors and silently
|
|
22
|
+
returned the untuned base model. PEFT emitted only a `UserWarning`, so nothing
|
|
23
|
+
failed and nothing looked wrong.
|
|
24
|
+
|
|
25
|
+
The training itself was correct — the streamed run's numerics are unaffected,
|
|
26
|
+
and v0.72.0's bit-exactness results still stand. Only the saved file was
|
|
27
|
+
affected.
|
|
28
|
+
|
|
29
|
+
**If you have a v0.72.0 streamed adapter: re-save or re-run it on v0.72.1.**
|
|
30
|
+
There is no way to recover the original file's association with the base model
|
|
31
|
+
beyond renaming its keys; re-running is the reliable path. A quick check —
|
|
32
|
+
if `adapter_model.safetensors` contains keys with `.inner.` in them, it is
|
|
33
|
+
affected:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
python -c "from safetensors.torch import load_file; \
|
|
37
|
+
print([k for k in load_file('adapter_model.safetensors') if '.inner.' in k][:3])"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Streamed adapters now save byte-for-byte in the same layout as an ordinary LoRA
|
|
41
|
+
run, and are portable to any tool that has never heard of layer streaming.
|
|
42
|
+
|
|
43
|
+
**Also fixed — `--hf-resume` bypassed the streaming resume refusal.** The guard
|
|
44
|
+
only tested `--resume`, but `--hf-resume` reaches `resume_from` through a
|
|
45
|
+
different branch. That combination previously appeared to work by accident
|
|
46
|
+
(checkpoint and live model shared the same key shape); once adapters are saved
|
|
47
|
+
canonically it would instead have matched *nothing* and continued with a
|
|
48
|
+
freshly initialised adapter, silently. Both flags are now refused for streaming
|
|
49
|
+
runs, naming v0.72.3.
|
|
50
|
+
|
|
51
|
+
Also in this release: every "this lands in vX.Y.Z" refusal message was corrected
|
|
52
|
+
after the v0.72.x roadmap was renumbered (NF4 streaming is now v0.72.2; the disk
|
|
53
|
+
tier, wider architectures, larger batches, gradient accumulation and
|
|
54
|
+
checkpoint/resume are v0.72.3; preference losses are v0.72.4).
|
|
55
|
+
|
|
56
|
+
**Known limitation:** in memory the streamed model's `named_parameters()` still
|
|
57
|
+
carries the wrapper segment, so loading *into* a streaming run (`--resume`)
|
|
58
|
+
remains unsupported and is refused with a message naming v0.72.3.
|
|
59
|
+
|
|
15
60
|
## [0.72.0] - 2026-07-26
|
|
16
61
|
|
|
62
|
+
> **Superseded by v0.72.1 — adapters saved by this version load as zero
|
|
63
|
+
> tensors.** The entry below is left as published; the defect and the fix are
|
|
64
|
+
> described under [0.72.1]. Version numbers named as "upcoming" below were also
|
|
65
|
+
> renumbered there (NF4 is v0.72.2, not v0.72.1).
|
|
66
|
+
|
|
17
67
|
**Layer streaming (BETA) — fine-tune models that don't fit in your card.** The
|
|
18
68
|
frozen base lives in CPU RAM and is streamed into two pre-allocated VRAM buffers
|
|
19
69
|
one decoder layer at a time, so peak VRAM is bounded by the size of *one layer*
|
|
@@ -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 (325 files, 16752 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.1
|
|
4
4
|
Summary: Fine-tune and post-train LLMs in one command. No SSH, no config hell.
|
|
5
5
|
Project-URL: Homepage, https://github.com/MakazhanAlpamys/Soup
|
|
6
6
|
Project-URL: Repository, https://github.com/MakazhanAlpamys/Soup
|
|
@@ -193,27 +193,39 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
193
193
|
|
|
194
194
|
## What's New
|
|
195
195
|
|
|
196
|
-
**v0.72.
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
196
|
+
**v0.72.1 — Fix: layer-streaming adapters were saved unloadable.** If you trained with
|
|
197
|
+
`stream_layers: true` on v0.72.0, that adapter is **inert** — every tensor was written under a
|
|
198
|
+
key with an extra `.inner.` segment, so `soup merge`, `soup serve`, `soup chat` and
|
|
199
|
+
`PeftModel.from_pretrained` loaded **zero** tensors and silently returned the untuned base.
|
|
200
|
+
Only a `UserWarning` was emitted.
|
|
201
|
+
|
|
202
|
+
- **The training was correct; only the saved file was affected.** v0.72.0's bit-exactness
|
|
203
|
+
results still stand.
|
|
204
|
+
- **Check an existing adapter:** if `adapter_model.safetensors` has keys containing `.inner.`,
|
|
205
|
+
it is affected — re-run or re-save it on v0.72.1.
|
|
206
|
+
- Streamed adapters now save in exactly the same layout as an ordinary LoRA run.
|
|
207
|
+
|
|
208
|
+
**Layer streaming (BETA), from v0.72.0.** Fine-tune models that don't fit in your card. The
|
|
209
|
+
frozen base streams from CPU RAM one decoder layer at a time into a small pool of VRAM buffers
|
|
210
|
+
while the LoRA adapters stay resident, so peak VRAM is bounded by one layer rather than the
|
|
211
|
+
whole model. **Qwen2.5-3B trains in 2.15 GB on a 4 GB card, where a resident run OOMs.**
|
|
200
212
|
|
|
201
213
|
- **`training.stream_layers: true`** — a config key, not a CLI flag. Tune with
|
|
202
|
-
`stream_source` (`ram`
|
|
214
|
+
`stream_source` (`ram` today; `disk` is v0.72.3) and `stream_buffers` (2–8, default 2).
|
|
203
215
|
- **Measured on a 4 GB RTX 3050 Laptop** (batch 1, gradient checkpointing on): 0.5B at
|
|
204
216
|
978.6 tok/s / 1.47 GB, 1.5B at 525.0 tok/s / 1.82 GB, 3B at 143.1 tok/s / 2.15 GB.
|
|
205
217
|
- **Honest cost: 1.43× slower than resident**, measured at 0.5B — the only apples-to-apples
|
|
206
218
|
comparison available on that box, because 1.5B and above cannot run resident there at all.
|
|
207
219
|
- **Proof-of-mechanism at 3B.** Nothing above 3B was measured; no 8B/14B claim is supported.
|
|
208
220
|
Scope: RAM tier, bf16, `task: sft`, Llama/Qwen, batch size 1, no gradient accumulation, no
|
|
209
|
-
`--resume`. 4-bit (NF4) streaming is **v0.72.
|
|
221
|
+
`--resume`. 4-bit (NF4) streaming is **v0.72.2** and is refused with a clear message today.
|
|
210
222
|
|
|
211
223
|
```yaml
|
|
212
224
|
# soup.yaml — then just `soup train --config soup.yaml`
|
|
213
225
|
training:
|
|
214
226
|
stream_layers: true # base streams from RAM; only the adapter trains
|
|
215
227
|
batch_size: 1
|
|
216
|
-
quantization: none # NF4 streaming lands in v0.72.
|
|
228
|
+
quantization: none # NF4 streaming lands in v0.72.2
|
|
217
229
|
```
|
|
218
230
|
|
|
219
231
|
<details>
|
|
@@ -49,27 +49,39 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
49
49
|
|
|
50
50
|
## What's New
|
|
51
51
|
|
|
52
|
-
**v0.72.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
**v0.72.1 — Fix: layer-streaming adapters were saved unloadable.** If you trained with
|
|
53
|
+
`stream_layers: true` on v0.72.0, that adapter is **inert** — every tensor was written under a
|
|
54
|
+
key with an extra `.inner.` segment, so `soup merge`, `soup serve`, `soup chat` and
|
|
55
|
+
`PeftModel.from_pretrained` loaded **zero** tensors and silently returned the untuned base.
|
|
56
|
+
Only a `UserWarning` was emitted.
|
|
57
|
+
|
|
58
|
+
- **The training was correct; only the saved file was affected.** v0.72.0's bit-exactness
|
|
59
|
+
results still stand.
|
|
60
|
+
- **Check an existing adapter:** if `adapter_model.safetensors` has keys containing `.inner.`,
|
|
61
|
+
it is affected — re-run or re-save it on v0.72.1.
|
|
62
|
+
- Streamed adapters now save in exactly the same layout as an ordinary LoRA run.
|
|
63
|
+
|
|
64
|
+
**Layer streaming (BETA), from v0.72.0.** Fine-tune models that don't fit in your card. The
|
|
65
|
+
frozen base streams from CPU RAM one decoder layer at a time into a small pool of VRAM buffers
|
|
66
|
+
while the LoRA adapters stay resident, so peak VRAM is bounded by one layer rather than the
|
|
67
|
+
whole model. **Qwen2.5-3B trains in 2.15 GB on a 4 GB card, where a resident run OOMs.**
|
|
56
68
|
|
|
57
69
|
- **`training.stream_layers: true`** — a config key, not a CLI flag. Tune with
|
|
58
|
-
`stream_source` (`ram`
|
|
70
|
+
`stream_source` (`ram` today; `disk` is v0.72.3) and `stream_buffers` (2–8, default 2).
|
|
59
71
|
- **Measured on a 4 GB RTX 3050 Laptop** (batch 1, gradient checkpointing on): 0.5B at
|
|
60
72
|
978.6 tok/s / 1.47 GB, 1.5B at 525.0 tok/s / 1.82 GB, 3B at 143.1 tok/s / 2.15 GB.
|
|
61
73
|
- **Honest cost: 1.43× slower than resident**, measured at 0.5B — the only apples-to-apples
|
|
62
74
|
comparison available on that box, because 1.5B and above cannot run resident there at all.
|
|
63
75
|
- **Proof-of-mechanism at 3B.** Nothing above 3B was measured; no 8B/14B claim is supported.
|
|
64
76
|
Scope: RAM tier, bf16, `task: sft`, Llama/Qwen, batch size 1, no gradient accumulation, no
|
|
65
|
-
`--resume`. 4-bit (NF4) streaming is **v0.72.
|
|
77
|
+
`--resume`. 4-bit (NF4) streaming is **v0.72.2** and is refused with a clear message today.
|
|
66
78
|
|
|
67
79
|
```yaml
|
|
68
80
|
# soup.yaml — then just `soup train --config soup.yaml`
|
|
69
81
|
training:
|
|
70
82
|
stream_layers: true # base streams from RAM; only the adapter trains
|
|
71
83
|
batch_size: 1
|
|
72
|
-
quantization: none # NF4 streaming lands in v0.72.
|
|
84
|
+
quantization: none # NF4 streaming lands in v0.72.2
|
|
73
85
|
```
|
|
74
86
|
|
|
75
87
|
<details>
|
|
@@ -233,7 +233,7 @@ Stream frozen base-model decoder layers ONE at a time from CPU RAM into small VR
|
|
|
233
233
|
```yaml
|
|
234
234
|
training:
|
|
235
235
|
stream_layers: true # Enable layer streaming
|
|
236
|
-
stream_source: auto # 'auto' (same-host RAM), 'ram', 'disk' (v0.72.
|
|
236
|
+
stream_source: auto # 'auto' (same-host RAM), 'ram', 'disk' (v0.72.3)
|
|
237
237
|
stream_buffers: 2 # Double-buffering; range [2, 8]
|
|
238
238
|
```
|
|
239
239
|
|
|
@@ -259,20 +259,20 @@ The tradeoff: **1.43× slower than resident training**, measured at 0.5B — the
|
|
|
259
259
|
|
|
260
260
|
**Honest scope (v0.72.0 = proof-of-mechanism):**
|
|
261
261
|
- **Models measured:** Qwen2.5-0.5B, 1.5B and 3B, plus a live `soup train` on SmolLM2-135M. **Nothing above 3B was measured, and no 8B / 14B / 70B claim is supported.**
|
|
262
|
-
- **RAM tier only.** `stream_source: ram` (`auto` resolves to it). The disk overflow tier ships in **v0.72.
|
|
262
|
+
- **RAM tier only.** `stream_source: ram` (`auto` resolves to it). The disk overflow tier ships in **v0.72.3**.
|
|
263
263
|
- **Llama / Qwen only**, `task: sft`, `backend: transformers`, `modality: text`.
|
|
264
|
-
- **`batch_size: 1`**, no gradient accumulation, no `--resume` — all ship in **v0.72.
|
|
265
|
-
- **bf16 base; `quantization: none` is required.** 4-bit (NF4) weights carry a quantisation state and cannot be byte-copied into a plain buffer, so NF4 streaming is **v0.72.
|
|
264
|
+
- **`batch_size: 1`**, no gradient accumulation, no `--resume` — all ship in **v0.72.3**.
|
|
265
|
+
- **bf16 base; `quantization: none` is required.** 4-bit (NF4) weights carry a quantisation state and cannot be byte-copied into a plain buffer, so NF4 streaming is **v0.72.2**. A `4bit` config is refused today with a message saying exactly that.
|
|
266
266
|
- **The 3B throughput is a LOWER BOUND.** The reference box could not page-lock the 5.55 GB base (its measured page-locked ceiling is 7.65 GB, and a CUDA context plus the model skeleton did not leave room), so that run fell back to a pageable store. Pageable memory makes the host-to-device copy synchronous, which costs overlap — visible as the GPU-utilisation drop from 96.8% (1.5B, pinned) to 79.3% (3B, pageable). Soup does this fallback automatically **and prints the cost** rather than absorbing it silently.
|
|
267
267
|
- Numbers are Windows/WDDM and therefore systematically pessimistic versus Linux. `expandable_segments:True` is silently ignored on Windows; Soup detects that and does not claim it is active.
|
|
268
268
|
|
|
269
269
|
**Rejected at config load (each names the release that lifts it):**
|
|
270
|
-
- `stream_source: disk` → the disk tier is v0.72.
|
|
271
|
-
- `quantization` other than `none` → NF4 streaming is v0.72.
|
|
270
|
+
- `stream_source: disk` → the disk tier is v0.72.3
|
|
271
|
+
- `quantization` other than `none` → NF4 streaming is v0.72.2
|
|
272
272
|
- `backend: unsloth` / `backend: mlx` → streaming replaces the model-load path those backends own
|
|
273
|
-
- `task` other than `sft` → preference losses are v0.72.
|
|
274
|
-
- `gradient_accumulation_steps > 1` → every micro-batch re-reads the whole base, so accumulation multiplies streaming IO linearly (v0.72.
|
|
275
|
-
- `batch_size` other than `1` → v0.72.
|
|
273
|
+
- `task` other than `sft` → preference losses are v0.72.4
|
|
274
|
+
- `gradient_accumulation_steps > 1` → every micro-batch re-reads the whole base, so accumulation multiplies streaming IO linearly (v0.72.3)
|
|
275
|
+
- `batch_size` other than `1` → v0.72.3
|
|
276
276
|
- `lora.use_dora` / `lora.use_vera` / `lora.init_strategy` other than `random` → these initialise from the real base weight, which is on the meta device under streaming
|
|
277
277
|
- `unfrozen_parameters`, `lisa_enabled`, `packing`, `multipack`, `use_fsdp2_compile`, `train_router_only`, `expand_layers` → each independently rewrites or re-freezes the same layers
|
|
278
278
|
- `stream_source` / `stream_buffers` set while `stream_layers: false` → a footgun, refused
|
|
@@ -294,12 +294,12 @@ data:
|
|
|
294
294
|
training:
|
|
295
295
|
epochs: 3
|
|
296
296
|
lr: 2e-5
|
|
297
|
-
batch_size: 1 # required; larger batches in v0.72.
|
|
298
|
-
gradient_accumulation_steps: 1 # required; accumulation in v0.72.
|
|
299
|
-
quantization: none # required; NF4 streaming is v0.72.
|
|
297
|
+
batch_size: 1 # required; larger batches in v0.72.3
|
|
298
|
+
gradient_accumulation_steps: 1 # required; accumulation in v0.72.3
|
|
299
|
+
quantization: none # required; NF4 streaming is v0.72.2
|
|
300
300
|
gradient_checkpointing: true # handled per-layer by the streamer
|
|
301
301
|
stream_layers: true # Enable layer streaming
|
|
302
|
-
stream_source: auto # RAM-based (disk in v0.72.
|
|
302
|
+
stream_source: auto # RAM-based (disk in v0.72.3)
|
|
303
303
|
stream_buffers: 2 # double-buffering
|
|
304
304
|
lora:
|
|
305
305
|
r: 64
|
|
@@ -313,16 +313,25 @@ output: ./output
|
|
|
313
313
|
- The 1.5B runs sit at ~97% GPU utilisation, i.e. compute-bound: with a page-locked store the layer loads hide almost completely behind compute. The 3B run's 79.3% is **not** a model-size effect — it is the cost of the pageable-store fallback on that particular box.
|
|
314
314
|
- Correctness is not a tradeoff: streamed and resident forward passes were verified **bit-exact**, and a 100-step streamed loss curve matched resident exactly. Streaming substitutes the same weight bytes into the same kernels.
|
|
315
315
|
|
|
316
|
+
> **v0.72.0 adapters are unloadable — re-run them on v0.72.1.** In v0.72.0 a streamed run saved every adapter tensor under a key carrying an extra `.inner.` segment, so `soup merge`, `soup serve`, `soup chat` and `PeftModel.from_pretrained` loaded **zero** tensors and silently returned the untuned base (PEFT emitted only a `UserWarning`). The training itself was correct — only the saved file was affected. Check with:
|
|
317
|
+
>
|
|
318
|
+
> ```bash
|
|
319
|
+
> python -c "from safetensors.torch import load_file; \
|
|
320
|
+
> print([k for k in load_file('adapter_model.safetensors') if '.inner.' in k][:3])"
|
|
321
|
+
> ```
|
|
322
|
+
>
|
|
323
|
+
> If that prints anything, the adapter is affected. From v0.72.1 a streamed adapter is byte-for-byte in the same layout as an ordinary LoRA run.
|
|
324
|
+
|
|
316
325
|
**Troubleshooting:**
|
|
317
|
-
- **"layer streaming needs the base to fit in RAM"** — the base is larger than free RAM. Free RAM or pick a smaller base; the disk overflow tier is v0.72.
|
|
326
|
+
- **"layer streaming needs the base to fit in RAM"** — the base is larger than free RAM. Free RAM or pick a smaller base; the disk overflow tier is v0.72.3.
|
|
318
327
|
- **"could not page-lock the base … falling back to a PAGEABLE RAM store"** — expected on a busy machine. Training continues, more slowly. Close other applications to keep the pinned store.
|
|
319
328
|
- **"layer streaming does not support model_type=…"** — v0.72.0 covers Llama and Qwen only.
|
|
320
329
|
- **Slower than you expected** — layer streaming trades time for memory. If the model already fits resident on your card, do not enable it.
|
|
321
330
|
|
|
322
331
|
**Roadmap (each refusal names its release):**
|
|
323
|
-
- 4-bit (NF4) streaming — **v0.72.
|
|
324
|
-
- Disk overflow tier, batch size > 1, gradient accumulation, checkpoint/resume, more architectures (Mistral / Gemma / Phi) — **v0.72.
|
|
325
|
-
- Preference losses (DPO / ORPO / SimPO / KTO) — **v0.72.
|
|
332
|
+
- 4-bit (NF4) streaming — **v0.72.2**, the first genuinely useful capability jump
|
|
333
|
+
- Disk overflow tier, batch size > 1, gradient accumulation, checkpoint/resume, more architectures (Mistral / Gemma / Phi) — **v0.72.3**
|
|
334
|
+
- Preference losses (DPO / ORPO / SimPO / KTO) — **v0.72.4**. GRPO and PPO are explicitly **not** planned: rollouts need generation, which re-reads the model per token
|
|
326
335
|
- A published 14B-on-8 GB reference benchmark — hardware-blocked; it needs an 8 GB card and 32 GB of RAM, which the development box does not have
|
|
327
336
|
|
|
328
337
|
**Shard cache.** The first streaming run rewrites the checkpoint into one safetensors shard per decoder layer under `~/.soup/layer-stream/` (override with `SOUP_LAYER_STREAM_CACHE_DIR`). That costs disk space roughly equal to the base. The cache is keyed to a fingerprint of the source checkpoint, so a base retrained in place re-shards instead of silently training against stale weights.
|
|
@@ -531,13 +531,20 @@ def train(
|
|
|
531
531
|
raise typer.Exit(code=2) from exc
|
|
532
532
|
|
|
533
533
|
# --- v0.72.0 BETA — layer streaming does not support resume yet ---
|
|
534
|
-
# Silently ignoring
|
|
534
|
+
# Silently ignoring a resume would restart from scratch and look like it
|
|
535
535
|
# worked, so refuse before any heavy work happens.
|
|
536
|
-
|
|
536
|
+
#
|
|
537
|
+
# v0.72.1: --hf-resume must be covered too. It sets resume_from through a
|
|
538
|
+
# different branch (see prepare_hf_resume below), so a guard on --resume
|
|
539
|
+
# alone let it through. That mattered more after the adapter-key fix: the
|
|
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:
|
|
537
544
|
console.print(
|
|
538
|
-
"[red]--resume
|
|
539
|
-
"
|
|
540
|
-
"v0.72.
|
|
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."
|
|
541
548
|
)
|
|
542
549
|
raise typer.Exit(code=2)
|
|
543
550
|
|
|
@@ -2930,7 +2930,7 @@ class TrainingConfig(BaseModel):
|
|
|
2930
2930
|
default="auto",
|
|
2931
2931
|
description=(
|
|
2932
2932
|
"Where the streamed base lives. 'ram' (the only tier implemented in "
|
|
2933
|
-
"v0.72.0) pins the base in CPU RAM; 'disk' is the v0.72.
|
|
2933
|
+
"v0.72.0) pins the base in CPU RAM; 'disk' is the v0.72.3 overflow "
|
|
2934
2934
|
"tier; 'auto' picks per free RAM."
|
|
2935
2935
|
),
|
|
2936
2936
|
)
|
|
@@ -4662,7 +4662,7 @@ class SoupConfig(BaseModel):
|
|
|
4662
4662
|
raise ValueError(
|
|
4663
4663
|
f"training.stream_layers requires task='sft' in v0.72.0; got "
|
|
4664
4664
|
f"task={self.task!r}. Preference losses (DPO/ORPO/SimPO/KTO) "
|
|
4665
|
-
f"land in v0.72.
|
|
4665
|
+
f"land in v0.72.4."
|
|
4666
4666
|
)
|
|
4667
4667
|
if self.backend != "transformers":
|
|
4668
4668
|
raise ValueError(
|
|
@@ -4680,24 +4680,24 @@ class SoupConfig(BaseModel):
|
|
|
4680
4680
|
f"training.stream_layers requires quantization='none' in "
|
|
4681
4681
|
f"v0.72.0 (got {tcfg.quantization!r}). NF4 weights carry a "
|
|
4682
4682
|
f"quant_state and cannot be byte-copied into a plain buffer; "
|
|
4683
|
-
f"NF4 streaming lands in v0.72.
|
|
4683
|
+
f"NF4 streaming lands in v0.72.2."
|
|
4684
4684
|
)
|
|
4685
4685
|
if tcfg.stream_source == "disk":
|
|
4686
4686
|
raise ValueError(
|
|
4687
4687
|
"training.stream_source='disk' is not implemented in v0.72.0 — "
|
|
4688
|
-
"the disk overflow tier lands in v0.72.
|
|
4688
|
+
"the disk overflow tier lands in v0.72.3. Use 'ram' or 'auto'."
|
|
4689
4689
|
)
|
|
4690
4690
|
if tcfg.batch_size != 1:
|
|
4691
4691
|
raise ValueError(
|
|
4692
4692
|
f"training.stream_layers requires batch_size=1 in v0.72.0 (got "
|
|
4693
|
-
f"{tcfg.batch_size!r}); larger batches land in v0.72.
|
|
4693
|
+
f"{tcfg.batch_size!r}); larger batches land in v0.72.3."
|
|
4694
4694
|
)
|
|
4695
4695
|
if tcfg.gradient_accumulation_steps != 1:
|
|
4696
4696
|
raise ValueError(
|
|
4697
4697
|
f"training.stream_layers requires gradient_accumulation_steps=1 "
|
|
4698
4698
|
f"(got {tcfg.gradient_accumulation_steps}); every micro-batch "
|
|
4699
4699
|
f"re-reads the entire base, so accumulation multiplies streaming "
|
|
4700
|
-
f"IO linearly. Accumulation lands in v0.72.
|
|
4700
|
+
f"IO linearly. Accumulation lands in v0.72.3."
|
|
4701
4701
|
)
|
|
4702
4702
|
if tcfg.lora.r < 1:
|
|
4703
4703
|
raise ValueError(
|
|
@@ -1019,7 +1019,7 @@ class SFTTrainerWrapper:
|
|
|
1019
1019
|
f"layer streaming needs the base to fit in RAM: {cfg.base} is "
|
|
1020
1020
|
f"{source_bytes / 1e9:.1f} GB on disk and only "
|
|
1021
1021
|
f"{early_free_ram / 1e9:.1f} GB of RAM is free. The disk "
|
|
1022
|
-
f"overflow tier lands in v0.72.
|
|
1022
|
+
f"overflow tier lands in v0.72.3 — free RAM or pick a "
|
|
1023
1023
|
f"smaller base."
|
|
1024
1024
|
)
|
|
1025
1025
|
|
|
@@ -1062,7 +1062,7 @@ class SFTTrainerWrapper:
|
|
|
1062
1062
|
f"layer streaming needs the base to fit in RAM: it is "
|
|
1063
1063
|
f"{(layer_bytes * index.n_layers + embed_bytes) / 1e9:.1f} GB and only "
|
|
1064
1064
|
f"{free_ram / 1e9:.1f} GB is free. The disk overflow tier lands "
|
|
1065
|
-
f"in v0.72.
|
|
1065
|
+
f"in v0.72.3 — free RAM or pick a smaller base."
|
|
1066
1066
|
)
|
|
1067
1067
|
console.print(render_stream_panel(plan))
|
|
1068
1068
|
console.print(
|
|
@@ -39,7 +39,7 @@ DEFAULT_STREAM_BUFFERS = 2
|
|
|
39
39
|
#: the base is frozen). Streaming always checkpoints, so this is never 4.
|
|
40
40
|
FLOPS_PER_PARAM_PER_TOKEN = 6
|
|
41
41
|
|
|
42
|
-
#: v0.72.0 scope. Breadth (Mistral / Gemma / Phi) is v0.72.
|
|
42
|
+
#: v0.72.0 scope. Breadth (Mistral / Gemma / Phi) is v0.72.3.
|
|
43
43
|
SUPPORTED_STREAM_ARCHS = ("llama", "qwen2", "qwen3")
|
|
44
44
|
|
|
45
45
|
_DTYPE_BYTES = {"bfloat16": 2, "float16": 2, "float32": 4}
|
|
@@ -84,7 +84,7 @@ def stream_arch_of(config: Any) -> str:
|
|
|
84
84
|
raise ValueError(
|
|
85
85
|
f"layer streaming does not support model_type={family!r} in "
|
|
86
86
|
f"v0.72.0. Supported: {', '.join(SUPPORTED_STREAM_ARCHS)}. "
|
|
87
|
-
f"More architectures land in v0.72.
|
|
87
|
+
f"More architectures land in v0.72.3."
|
|
88
88
|
)
|
|
89
89
|
return family
|
|
90
90
|
|
|
@@ -313,7 +313,7 @@ def build_stream_plan(
|
|
|
313
313
|
notes = []
|
|
314
314
|
if tier == TIER_DISK:
|
|
315
315
|
notes.append(
|
|
316
|
-
"base does not fit in RAM — the disk tier lands in v0.72.
|
|
316
|
+
"base does not fit in RAM — the disk tier lands in v0.72.3; "
|
|
317
317
|
"v0.72.0 supports stream_source='ram' only"
|
|
318
318
|
)
|
|
319
319
|
decision = decide_pinning(store_bytes, pinned_limit_bytes)
|
|
@@ -278,6 +278,50 @@ def _build_streamed_layer_class():
|
|
|
278
278
|
|
|
279
279
|
return super()._apply(_skip_meta, recurse=recurse)
|
|
280
280
|
|
|
281
|
+
def state_dict(
|
|
282
|
+
self,
|
|
283
|
+
*args: Any,
|
|
284
|
+
destination: Any = None,
|
|
285
|
+
prefix: str = "",
|
|
286
|
+
keep_vars: bool = False,
|
|
287
|
+
) -> Any:
|
|
288
|
+
# v0.72.1 — serialise as though this wrapper were not in the tree.
|
|
289
|
+
#
|
|
290
|
+
# The wrapper holds the real layer as a child named `inner`, so
|
|
291
|
+
# every adapter parameter would otherwise be written as
|
|
292
|
+
# `...layers.0.inner.self_attn.q_proj.lora_A.weight`. That file
|
|
293
|
+
# loads as ZERO tensors into any normal model — PEFT reports the
|
|
294
|
+
# keys as missing and returns the untuned base, with no exception.
|
|
295
|
+
# Every adapter artifact (the final `trainer.save_model()`, each
|
|
296
|
+
# `save_steps` checkpoint, and therefore everything downstream:
|
|
297
|
+
# `soup merge` / `serve` / `chat` / `adapters *` / the Registry)
|
|
298
|
+
# reaches disk through this method, so delegating at OUR prefix is
|
|
299
|
+
# what makes a streamed adapter indistinguishable from a normal
|
|
300
|
+
# LoRA run.
|
|
301
|
+
#
|
|
302
|
+
# Serialisation-only, deliberately: the forward path is untouched,
|
|
303
|
+
# so v0.72.0's bit-exactness gates remain valid. The cost is that
|
|
304
|
+
# `named_parameters()` still shows `.inner.`, i.e. loading INTO a
|
|
305
|
+
# streamed model stays unsupported (`--resume` is refused; the
|
|
306
|
+
# checkpoint/resume slot is v0.72.3).
|
|
307
|
+
#
|
|
308
|
+
# The wrapper owns no parameters or buffers of its own — they all
|
|
309
|
+
# live on `inner` — so nothing is lost by not serialising it. It
|
|
310
|
+
# also means bypassing nn.Module.state_dict skips only hooks
|
|
311
|
+
# registered on the WRAPPER itself, of which there are none (the
|
|
312
|
+
# prefetch hook lives on the decoder container, not here).
|
|
313
|
+
if args:
|
|
314
|
+
# torch's legacy positional form: (destination, prefix, keep_vars)
|
|
315
|
+
if destination is None:
|
|
316
|
+
destination = args[0]
|
|
317
|
+
if len(args) > 1 and prefix == "":
|
|
318
|
+
prefix = args[1]
|
|
319
|
+
if len(args) > 2 and keep_vars is False:
|
|
320
|
+
keep_vars = args[2]
|
|
321
|
+
return self.inner.state_dict(
|
|
322
|
+
destination=destination, prefix=prefix, keep_vars=keep_vars
|
|
323
|
+
)
|
|
324
|
+
|
|
281
325
|
def __getattr__(self, name: str) -> Any:
|
|
282
326
|
# transformers reads contract attributes straight off the layer
|
|
283
327
|
# object (this version reads `decoder_layer.attention_type`). The
|
|
@@ -50,7 +50,7 @@ class TestStreamArchAllowlist:
|
|
|
50
50
|
stream_arch_of(_Cfg("gpt2"))
|
|
51
51
|
|
|
52
52
|
def test_mistral_is_rejected_in_v0720(self):
|
|
53
|
-
"""Mistral is v0.72.
|
|
53
|
+
"""Mistral is v0.72.3 breadth — it must not silently half-work."""
|
|
54
54
|
from soup_cli.utils.layer_stream import stream_arch_of
|
|
55
55
|
|
|
56
56
|
with pytest.raises(ValueError, match="mistral"):
|
|
@@ -776,13 +776,13 @@ class TestStreamTaskAndBackendGates:
|
|
|
776
776
|
|
|
777
777
|
|
|
778
778
|
class TestStreamScopeGates:
|
|
779
|
-
def
|
|
780
|
-
"""NF4 streaming is the v0.72.
|
|
781
|
-
with pytest.raises(ValueError, match="v0.72.
|
|
779
|
+
def test_quantization_rejected_and_names_nf4_slot(self):
|
|
780
|
+
"""NF4 streaming is the v0.72.2 slot — say so instead of half-working."""
|
|
781
|
+
with pytest.raises(ValueError, match="v0.72.2"):
|
|
782
782
|
_load(_stream_yaml(training={"quantization": "4bit"}))
|
|
783
783
|
|
|
784
|
-
def
|
|
785
|
-
with pytest.raises(ValueError, match="v0.72.
|
|
784
|
+
def test_disk_source_rejected_and_names_breadth_slot(self):
|
|
785
|
+
with pytest.raises(ValueError, match="v0.72.3"):
|
|
786
786
|
_load(_stream_yaml(training={"stream_source": "disk"}))
|
|
787
787
|
|
|
788
788
|
def test_batch_size_above_one_rejected(self):
|