soup-cli 0.72.2__tar.gz → 0.72.4__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.4/.github/FUNDING.yml +5 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/CHANGELOG.md +123 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/CODE_OF_CONDUCT.md +3 -1
- {soup_cli-0.72.2 → soup_cli-0.72.4}/CONTRIBUTING.md +5 -3
- {soup_cli-0.72.2 → soup_cli-0.72.4}/PKG-INFO +86 -38
- {soup_cli-0.72.2 → soup_cli-0.72.4}/README.md +77 -30
- {soup_cli-0.72.2 → soup_cli-0.72.4}/SECURITY.md +3 -0
- soup_cli-0.72.4/benchmarks/README.md +57 -0
- soup_cli-0.72.4/benchmarks/gate-v0.72.0-layer-streaming.md +233 -0
- soup_cli-0.72.4/benchmarks/gate-v0.72.2-nf4.md +339 -0
- soup_cli-0.72.4/benchmarks/gate-v0.72.3-breadth.md +472 -0
- soup_cli-0.72.4/benchmarks/gate-v0.72.4-preference-losses.md +296 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/docs/commands.md +2 -4
- {soup_cli-0.72.2 → soup_cli-0.72.4}/docs/performance-and-quantization.md +122 -22
- {soup_cli-0.72.2 → soup_cli-0.72.4}/docs/training.md +6 -5
- {soup_cli-0.72.2 → soup_cli-0.72.4}/pyproject.toml +31 -4
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/doctor.py +37 -2
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/train.py +7 -17
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/config/schema.py +60 -19
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/dpo.py +28 -6
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/kto.py +27 -6
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/orpo.py +28 -6
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/sft.py +9 -219
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/simpo.py +28 -6
- soup_cli-0.72.4/src/soup_cli/trainer/stream_setup.py +453 -0
- soup_cli-0.72.4/src/soup_cli/utils/layer_stream.py +859 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/layer_stream_runtime.py +272 -6
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07200.py +64 -29
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07201.py +53 -43
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07202.py +42 -6
- soup_cli-0.72.4/tests/test_v07203.py +1386 -0
- soup_cli-0.72.4/tests/test_v07204.py +1073 -0
- soup_cli-0.72.4/tests/test_version_sync.py +82 -0
- soup_cli-0.72.2/.github/FUNDING.yml +0 -7
- soup_cli-0.72.2/src/soup_cli/utils/layer_stream.py +0 -401
- {soup_cli-0.72.2 → soup_cli-0.72.4}/.dockerignore +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/.github/pull_request_template.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/.gitignore +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/.mailmap +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/AGENTS.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/CODEOWNERS +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/CONTRIBUTORS.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/Dockerfile +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/LICENSE +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/NOTICE +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/docker-compose.yml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/docs/README.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/docs/adapters-and-governance.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/docs/backends-and-ops.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/docs/compliance.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/docs/data.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/docs/evaluation.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/docs/models.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/docs/peft-and-efficiency.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/docs/serving-and-export.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/examples/README.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/examples/reward_hacking/rewards.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/soup.png +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/soup_logo_svg.svg +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/cli.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/cloud/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/cloud/modal.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/_eval_v0650.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/_eval_v07110.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/adapters.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/advise.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/card.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/ci.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/data.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/data_canary.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/data_doctor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/data_topics.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/diagnose.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/draft.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/mcp.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/ra_dit.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/reward.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/serve.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/ship.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/shrink.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/spectrum.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/_fixtures/gate/format_json.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/_fixtures/gate/safety.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/_fixtures/gate/tool_call.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/loader.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/envs/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/envs/_common.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/envs/calculator.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/envs/guess_number.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/envs/retrieval_qa.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/eval/gate_suites.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/mcp_server/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/mcp_server/registry.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/mcp_server/server.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/recipes/catalog.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/registry/store.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/eu-ai-act.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/hipaa.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/soc2.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/sr-11-7.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/asr.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/bitnet.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/grpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/mole_routing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/online_dpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/ppo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/raft.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/tts.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/ui/app.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/adapter_arithmetic.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/adapter_fuse.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/advise.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/agent_sandbox.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/asr_metrics.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/best_of_n.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/canary.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/ci_workflow.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/data_doctor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/data_lint.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/diagnose/citation.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/diagnose/live.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/draft.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/edit_kernels.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/embed.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/evolve.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/harm_probe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/hubs.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/interference_live.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/layer_shard.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/lisa.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/live_eval.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/mod.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/peft_wiring.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/prm_reward.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/probe_kernel.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/ra_dit_run.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/raft.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/rehearsal.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/reward_hack_control.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/reward_stress.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/reward_synth.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/rl_checkpoint.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/semdedup.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/ship_verdict.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/shrink.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/spectrum_scan.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/topics.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/truth_probe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/tts_codec.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/unlearn_kernels.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/templates/chat.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/templates/code.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/templates/medical.yaml +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/__init__.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/conftest.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/qa/v07114_qa.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_adapters.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_audio.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_autopilot.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_bco.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_bench.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_build_dag.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_callback.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_cans.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_chat.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_chat_template.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_cli.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_cli_startup_is_light.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_code_review_critical.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_code_review_deferred.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_code_review_high.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_code_review_medium_low.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_code_review_recurring.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_config.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_cost.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_curriculum.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_data.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_data_augment.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_data_sample.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_data_split.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_data_tools.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_diff.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_display.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_doctor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_embedding.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_errors.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_eval.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_export.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_formats.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_generate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_gpu.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_grpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_infer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_init.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_ipo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_issue300_online_dpo_train.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_issue302_vision_pad_token.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_issue305_mixed_rank_arithmetic.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_issue308_callback_subclass.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_kto.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_loader.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_log_level.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_merge.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_migrate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_moe.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_orpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_packing.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_part_a_wave1.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_performance.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_ppo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_pretrain.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_profile.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_profiling.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_progress.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_push.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_qat.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_quant_check.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_quickstart.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_recipes.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_registry.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_relora.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_replay.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_resume.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_review_fixes_v07133.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_rlvr.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_run_cost.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_runs.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_serve.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_server_generate.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_simpo.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_sweep.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_tracker.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_training_speed.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_tui.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_ui.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_unsloth.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0420.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0450.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0490.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0510.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0520.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0530.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v05310.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v05311.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0532.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0533.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0534.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0535.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0536.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0537.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0538.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0539.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0540.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0550.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0560.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0580.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0590.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07110.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07111.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07112.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07113.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07114.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07115.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07116.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07117.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07118.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07119.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0712.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07120.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07121.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07122.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07123.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07124.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07125.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07126.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07127.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07128.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07129.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0713.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07130.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07131.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07132.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07133.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07134.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07135.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07136.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07137.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07138.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07139.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0714.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07140.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v07141.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0715.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0716.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0717.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0718.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_v0719.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_validator.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_vision.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_warmup.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_why.py +0 -0
- {soup_cli-0.72.2 → soup_cli-0.72.4}/tests/test_windows_encoding.py +0 -0
|
@@ -12,6 +12,129 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.72.4] - 2026-08-03
|
|
16
|
+
|
|
17
|
+
**Added — preference losses over layer streaming: DPO, ORPO, SimPO and KTO.**
|
|
18
|
+
|
|
19
|
+
Layer streaming kept the frozen base in CPU RAM and fed it to the GPU one decoder
|
|
20
|
+
layer at a time, but only for `task: sft`. This release opens it to the four
|
|
21
|
+
preference losses. The whole risk was one thing: **DPO needs a reference model, and a
|
|
22
|
+
second model instance would double memory and defeat the feature entirely.**
|
|
23
|
+
|
|
24
|
+
- **The reference is the same streamed base with its adapters disabled** — one set of
|
|
25
|
+
weights, one stream, no second pass. Measured on an RTX 3050 4 GB with a 730 MB
|
|
26
|
+
model: streamed DPO peaked at **0.914x** the SFT peak, with a byte-identical RAM
|
|
27
|
+
store and buffer pool. Forcing a real second instance in the same harness cost
|
|
28
|
+
**+730.44 MB against 730.44 MB of weights** — exactly one copy. That control is what
|
|
29
|
+
makes the first number mean something.
|
|
30
|
+
- **KTO is *not* reference-free**, contrary to how it is usually described: it selects
|
|
31
|
+
its reference exactly the way DPO does, so it gets the same treatment and the same
|
|
32
|
+
memory assertion. ORPO and SimPO genuinely are reference-free.
|
|
33
|
+
- **Bit-exact against a resident run of the same loss** — `0.0` difference for all
|
|
34
|
+
four, the standard every slot in this series inherits.
|
|
35
|
+
- **The pre-flight now knows that a paired loss is twice the rows.** DPO, ORPO and
|
|
36
|
+
SimPO concatenate chosen and rejected into one tensor, so a VRAM budget computed at
|
|
37
|
+
one row per example would have under-predicted by half — and on Windows the
|
|
38
|
+
consequence is not an error but a silent spill to host memory that makes the run an
|
|
39
|
+
order of magnitude slower.
|
|
40
|
+
- **KTO requires `batch_size >= 2`** (its KL term is degenerate at 1). Soup now says so
|
|
41
|
+
when your config is read, rather than minutes later after sharding the checkpoint.
|
|
42
|
+
KTO is streamable at all only because v0.72.3 lifted the batch-1 restriction.
|
|
43
|
+
- **`grpo` and `ppo` remain excluded permanently**, not "not yet": generation rollouts
|
|
44
|
+
re-read every layer once per generated token, which destroys the amortisation
|
|
45
|
+
streaming depends on. The refusal says so and deliberately names no release.
|
|
46
|
+
|
|
47
|
+
The streaming setup now lives in one shared place instead of being copied per trainer,
|
|
48
|
+
so the NF4 pre-flight, the RAM/disk tier choice and the VRAM fit refusal cannot drift
|
|
49
|
+
between SFT and the preference losses.
|
|
50
|
+
|
|
51
|
+
**Fixed — `trl` is now capped below 0.25, and that is a real bug fix, not a CI tweak.**
|
|
52
|
+
Six trainers (`bco`, `dpo`, `ipo`, `kto`, `orpo`, `simpo`) pass `max_prompt_length` to
|
|
53
|
+
their `trl` config, and `trl` removed it in stages: `bco` at 0.25, `kto`/`orpo`/`simpo`
|
|
54
|
+
at 0.26, `dpo`/`ipo` at 0.29 — which also deleted `ORPOConfig` and `CPOConfig`
|
|
55
|
+
outright. So anyone who ran `pip install 'soup-cli[train]'` and resolved to a recent
|
|
56
|
+
`trl` had `soup train --task orpo` fail on import.
|
|
57
|
+
|
|
58
|
+
That was already true before this release and nothing caught it: the `trl` imports
|
|
59
|
+
live inside `setup()`, which no test had ever called on those wrappers, so CI stayed
|
|
60
|
+
green while the code only worked on older `trl`. This release's end-to-end preference
|
|
61
|
+
tests are what surfaced it.
|
|
62
|
+
|
|
63
|
+
The boundary was read off the published wheels per config rather than inferred from a
|
|
64
|
+
version number — the removal being staged is exactly why a single spot-check gives the
|
|
65
|
+
wrong answer. Supporting the newer API is its own piece of work; declaring a dependency
|
|
66
|
+
the code actually works with comes first.
|
|
67
|
+
|
|
68
|
+
Honest costs: streaming makes the reference free in **memory**, not in **time** — DPO
|
|
69
|
+
traverses the layer stack three times per step against SFT's two, measured at **1.52x**
|
|
70
|
+
the layer reads. And the VRAM pre-flight is a sound *upper* bound for preference
|
|
71
|
+
losses rather than a tight estimate; see Known Limitations in the release notes.
|
|
72
|
+
|
|
73
|
+
## [0.72.3] - 2026-07-28
|
|
74
|
+
|
|
75
|
+
**Added — layer streaming breadth: more architectures, bigger batches, resume, and a
|
|
76
|
+
disk tier.**
|
|
77
|
+
|
|
78
|
+
Layer streaming (v0.72.0–.2) was deliberately narrow: Llama/Qwen only, batch 1, no
|
|
79
|
+
gradient accumulation, no resume, RAM only. This release lifts all of it, and each
|
|
80
|
+
capability was gated against a streamed-vs-resident bit-exactness reference before any
|
|
81
|
+
of it was written.
|
|
82
|
+
|
|
83
|
+
- **Six more model families.** `mistral`, `gemma`, `gemma2`, `gemma3_text`, `phi` and
|
|
84
|
+
`phi3` join the allowlist, each verified **bit-exact** against the same checkpoint
|
|
85
|
+
loaded resident, under both bf16 and NF4. Phi-3 is the notable one: it fuses Q/K/V
|
|
86
|
+
into a single `qkv_proj`, so there is no `q_proj` to find, and it is bit-exact anyway.
|
|
87
|
+
Multimodal `gemma3` is deliberately *not* accepted — only `gemma3_text`.
|
|
88
|
+
- **`batch_size` above 1, and gradient accumulation.** Both previously refused.
|
|
89
|
+
- **A pre-flight VRAM budget that accounts for batch and vocabulary.** Streaming bounds
|
|
90
|
+
the *weights*; activations and the logits tensor are untouched by it and both scale
|
|
91
|
+
with `batch × seq`. On a 152k-vocab model at batch 8 the logits term alone measured
|
|
92
|
+
**8.71 GB — 146× the entire layer-buffer pool**. `soup train` now predicts peak VRAM
|
|
93
|
+
and refuses a run that will not fit, naming the two knobs that scale it.
|
|
94
|
+
- **A throughput forecast**, quoted as a range from a GEMM ceiling measured on your own
|
|
95
|
+
card in that session, alongside the SM clock — never a compiled-in per-card constant.
|
|
96
|
+
- **`--resume` and `--hf-resume` work with streaming.**
|
|
97
|
+
- **A disk overflow tier.** `stream_source: auto` (the default) uses RAM when the base
|
|
98
|
+
fits and falls back to an NVMe disk tier when it does not, holding nothing resident.
|
|
99
|
+
`stream_source: ram` refuses instead of falling back. Non-NVMe disks are still
|
|
100
|
+
refused outright.
|
|
101
|
+
- **`soup doctor --disk`** reports the detected media type.
|
|
102
|
+
|
|
103
|
+
**Fixed**
|
|
104
|
+
|
|
105
|
+
- `estimate_logits_bytes` charged 6 bytes per logit element; the measured peak is **14**
|
|
106
|
+
(`transformers` holds the bf16 logits, the fp32 upcast, log-softmax's fp32 output and
|
|
107
|
+
the fp32 gradient live at once). The old figure under-predicted that term by 2.33×.
|
|
108
|
+
- Adapters could not be loaded *into* a streamed model: `load_state_dict` narrows keys
|
|
109
|
+
by child name, so a canonical checkpoint matched **0 of N** tensors and PEFT reported
|
|
110
|
+
only a warning — a resumed run reproduced the from-scratch loss curve exactly. The
|
|
111
|
+
streaming layer now redirects canonical keys at load time, mirroring the v0.72.1
|
|
112
|
+
save-side fix.
|
|
113
|
+
- The NVMe-only tier guard was wired to a hardcoded constant and could never fire.
|
|
114
|
+
- Streaming weight sources are now released when training ends **or raises**; the disk
|
|
115
|
+
tier holds one open shard handle per decoder layer.
|
|
116
|
+
- Subprocess helpers resolve tools to absolute paths (on Windows, `CreateProcess`
|
|
117
|
+
searches the current directory before `PATH`).
|
|
118
|
+
- The `[mcp]` extra is now capped at `mcp<2`. The SDK's 2.0.0 release removed
|
|
119
|
+
`mcp.shared.memory.create_connected_server_and_client_session` and dropped
|
|
120
|
+
`Server.list_tools`, breaking `soup mcp serve`'s round-trip tests for anyone
|
|
121
|
+
installing fresh. Support for the 2.x API is tracked separately.
|
|
122
|
+
|
|
123
|
+
**Known limitations**
|
|
124
|
+
|
|
125
|
+
- The **RAM-vs-disk performance gap is unmeasured** on the development hardware and no
|
|
126
|
+
number is claimed for it. safetensors memory-maps the shards, so the OS page cache
|
|
127
|
+
keeps them resident between steps on a machine with spare RAM, and at ~5 effective
|
|
128
|
+
TFLOPS the NVMe read hides under compute. The disk tier's *correctness* is verified
|
|
129
|
+
bit-exact against the RAM tier; its speed relative to RAM is not characterised.
|
|
130
|
+
- End-to-end `soup train --resume` could not be demonstrated on the development box:
|
|
131
|
+
`transformers` refuses `torch.load` below torch 2.6 (CVE-2025-32434), which blocks
|
|
132
|
+
**every** resume there, streaming or not. The streaming-specific half — the adapter
|
|
133
|
+
round-trip and loss continuity — is verified on the production CUDA path.
|
|
134
|
+
- Loading *into* a streamed model works; `named_parameters()` and `state_dict()` still
|
|
135
|
+
disagree in memory, which is the deliberate cost of a serialisation-only design.
|
|
136
|
+
- Layer streaming remains **BETA**.
|
|
137
|
+
|
|
15
138
|
## [0.72.2] - 2026-07-28
|
|
16
139
|
|
|
17
140
|
**Added — NF4 layer streaming: fine-tune Llama-3.1-8B on a 4 GB laptop GPU.**
|
|
@@ -36,7 +36,9 @@ This Code of Conduct applies within all community spaces, and also applies when
|
|
|
36
36
|
|
|
37
37
|
## Enforcement
|
|
38
38
|
|
|
39
|
-
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the project maintainer at **
|
|
39
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the project maintainer at **team@trysoup.dev** (the project address) or **makazanalpamys@gmail.com** (the maintainer's personal address). All complaints will be reviewed and investigated promptly and fairly.
|
|
40
|
+
|
|
41
|
+
This Code of Conduct applies in every project space, including the [Discord server](https://discord.gg/8RgVbFA6Zq).
|
|
40
42
|
|
|
41
43
|
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
|
|
42
44
|
|
|
@@ -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 (332 files, 17051 tests)
|
|
124
124
|
examples/ - Real-world config examples and datasets
|
|
125
125
|
```
|
|
126
126
|
|
|
@@ -459,8 +459,10 @@ If you contributed and aren't credited somewhere, that's a bug — open a PR or
|
|
|
459
459
|
|
|
460
460
|
- **Issues:** Report bugs and request features on [GitHub Issues](https://github.com/MakazhanAlpamys/Soup/issues)
|
|
461
461
|
- **Discussions:** Ask questions on [GitHub Discussions](https://github.com/MakazhanAlpamys/Soup/discussions)
|
|
462
|
-
- **
|
|
463
|
-
|
|
462
|
+
- **Discord:** Chat with maintainers and other users on [Discord](https://discord.gg/8RgVbFA6Zq) — good for
|
|
463
|
+
quick questions and pairing on a PR; anything worth finding later still belongs in Issues or Discussions
|
|
464
|
+
- **Code of Conduct:** Please read [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) — it applies on Discord too
|
|
465
|
+
- **Security:** Report security issues via [SECURITY.md](SECURITY.md) — privately, never in Discord
|
|
464
466
|
|
|
465
467
|
## Questions?
|
|
466
468
|
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: soup-cli
|
|
3
|
-
Version: 0.72.
|
|
3
|
+
Version: 0.72.4
|
|
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
|
|
7
7
|
Project-URL: Issues, https://github.com/MakazhanAlpamys/Soup/issues
|
|
8
|
-
|
|
8
|
+
Project-URL: Discord, https://discord.gg/8RgVbFA6Zq
|
|
9
|
+
Author-email: Soup Team <team@trysoup.dev>
|
|
9
10
|
License-Expression: Apache-2.0
|
|
10
11
|
License-File: LICENSE
|
|
11
12
|
License-File: NOTICE
|
|
@@ -29,11 +30,11 @@ Requires-Dist: bitsandbytes>=0.41.0; extra == 'all'
|
|
|
29
30
|
Requires-Dist: datasets>=2.14.0; extra == 'all'
|
|
30
31
|
Requires-Dist: datasketch>=1.6.0; extra == 'all'
|
|
31
32
|
Requires-Dist: fastapi>=0.104.0; extra == 'all'
|
|
32
|
-
Requires-Dist: mcp
|
|
33
|
+
Requires-Dist: mcp<2,>=1.2.0; extra == 'all'
|
|
33
34
|
Requires-Dist: peft>=0.7.0; extra == 'all'
|
|
34
35
|
Requires-Dist: torch>=2.0.0; extra == 'all'
|
|
35
36
|
Requires-Dist: transformers<5.0.0,>=4.36.0; extra == 'all'
|
|
36
|
-
Requires-Dist: trl
|
|
37
|
+
Requires-Dist: trl<0.25,>=0.7.0; extra == 'all'
|
|
37
38
|
Requires-Dist: uvicorn>=0.24.0; extra == 'all'
|
|
38
39
|
Provides-Extra: audio
|
|
39
40
|
Requires-Dist: librosa>=0.10.0; extra == 'audio'
|
|
@@ -61,7 +62,7 @@ Requires-Dist: bitsandbytes>=0.41.0; extra == 'dev'
|
|
|
61
62
|
Requires-Dist: cryptography>=41.0.0; extra == 'dev'
|
|
62
63
|
Requires-Dist: datasets>=2.14.0; extra == 'dev'
|
|
63
64
|
Requires-Dist: httpx>=0.24.0; extra == 'dev'
|
|
64
|
-
Requires-Dist: mcp
|
|
65
|
+
Requires-Dist: mcp<2,>=1.2.0; extra == 'dev'
|
|
65
66
|
Requires-Dist: mypy>=1.8.0; extra == 'dev'
|
|
66
67
|
Requires-Dist: peft>=0.7.0; extra == 'dev'
|
|
67
68
|
Requires-Dist: pre-commit>=3.5.0; extra == 'dev'
|
|
@@ -71,7 +72,7 @@ Requires-Dist: reportlab>=4.0.0; extra == 'dev'
|
|
|
71
72
|
Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
72
73
|
Requires-Dist: torch>=2.0.0; extra == 'dev'
|
|
73
74
|
Requires-Dist: transformers<5.0.0,>=4.36.0; extra == 'dev'
|
|
74
|
-
Requires-Dist: trl
|
|
75
|
+
Requires-Dist: trl<0.25,>=0.7.0; extra == 'dev'
|
|
75
76
|
Provides-Extra: eval
|
|
76
77
|
Requires-Dist: lm-eval>=0.4.0; extra == 'eval'
|
|
77
78
|
Provides-Extra: fast
|
|
@@ -83,7 +84,7 @@ Requires-Dist: auto-gptq>=0.7.0; extra == 'gptq'
|
|
|
83
84
|
Provides-Extra: liger
|
|
84
85
|
Requires-Dist: liger-kernel>=0.3.0; extra == 'liger'
|
|
85
86
|
Provides-Extra: mcp
|
|
86
|
-
Requires-Dist: mcp
|
|
87
|
+
Requires-Dist: mcp<2,>=1.2.0; extra == 'mcp'
|
|
87
88
|
Provides-Extra: mix
|
|
88
89
|
Requires-Dist: scikit-optimize>=0.9.0; extra == 'mix'
|
|
89
90
|
Provides-Extra: mlx
|
|
@@ -130,7 +131,7 @@ Requires-Dist: datasets>=2.14.0; extra == 'train'
|
|
|
130
131
|
Requires-Dist: peft>=0.7.0; extra == 'train'
|
|
131
132
|
Requires-Dist: torch>=2.0.0; extra == 'train'
|
|
132
133
|
Requires-Dist: transformers<5.0.0,>=4.36.0; extra == 'train'
|
|
133
|
-
Requires-Dist: trl
|
|
134
|
+
Requires-Dist: trl<0.25,>=0.7.0; extra == 'train'
|
|
134
135
|
Provides-Extra: tui
|
|
135
136
|
Requires-Dist: textual>=0.50.0; extra == 'tui'
|
|
136
137
|
Provides-Extra: ui
|
|
@@ -158,7 +159,8 @@ Description-Content-Type: text/markdown
|
|
|
158
159
|
<a href="#configuration">Config</a> ·
|
|
159
160
|
<a href="#documentation">Docs</a> ·
|
|
160
161
|
<a href="docs/commands.md">Commands</a> ·
|
|
161
|
-
<a href="docs/models.md">Models</a>
|
|
162
|
+
<a href="docs/models.md">Models</a> ·
|
|
163
|
+
<a href="https://discord.gg/8RgVbFA6Zq">Discord</a>
|
|
162
164
|
</p>
|
|
163
165
|
|
|
164
166
|
<p align="center">
|
|
@@ -169,6 +171,8 @@ Description-Content-Type: text/markdown
|
|
|
169
171
|
<a href="https://github.com/MakazhanAlpamys/Soup/actions"><img src="https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/MakazhanAlpamys/65fdc943f85f3b2c46ecddb415c2b779/raw/soup_tests.json" alt="Tests"></a>
|
|
170
172
|
<a href="https://github.com/MakazhanAlpamys/Soup/actions"><img src="https://github.com/MakazhanAlpamys/Soup/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
171
173
|
<a href="https://trysoup.dev"><img src="https://img.shields.io/badge/website-trysoup.dev-blue" alt="Website"></a>
|
|
174
|
+
<a href="https://discord.gg/8RgVbFA6Zq"><img src="https://img.shields.io/badge/Discord-join-5865F2?logo=discord&logoColor=white" alt="Discord"></a>
|
|
175
|
+
<a href="https://doi.org/10.5281/zenodo.21771064"><img src="https://zenodo.org/badge/DOI/10.5281/zenodo.21771064.svg" alt="DOI"></a>
|
|
172
176
|
</p>
|
|
173
177
|
|
|
174
178
|
---
|
|
@@ -193,31 +197,36 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
193
197
|
|
|
194
198
|
## What's New
|
|
195
199
|
|
|
196
|
-
**v0.72.
|
|
197
|
-
streaming keeps the frozen base
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
- **
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
- **
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
200
|
+
**v0.72.4 — align on a laptop: DPO, ORPO, SimPO and KTO over layer streaming.** Layer
|
|
201
|
+
streaming keeps the frozen base out of VRAM and feeds it to the GPU one decoder layer at
|
|
202
|
+
a time. It used to support supervised fine-tuning only; now it runs the preference
|
|
203
|
+
losses too.
|
|
204
|
+
|
|
205
|
+
- **DPO's reference model is free.** DPO needs a reference to compare against, and a
|
|
206
|
+
second copy of the model would double memory and defeat the whole point. Soup uses
|
|
207
|
+
*the same streamed base with its adapters switched off* — one set of weights, one
|
|
208
|
+
stream. Measured on an RTX 3050 4 GB: streamed DPO peaked at **0.914×** the
|
|
209
|
+
supervised-fine-tuning peak. Forcing a real second model in the same test cost
|
|
210
|
+
**+730 MB — exactly one copy of the weights.**
|
|
211
|
+
- **KTO is not reference-free**, however it is usually described: it picks its reference
|
|
212
|
+
the same way DPO does, so it gets the same treatment. ORPO and SimPO genuinely are.
|
|
213
|
+
- **Bit-exact against a normal, non-streamed run** of the same loss — `0.0` difference,
|
|
214
|
+
the bar every release in this series has to clear.
|
|
215
|
+
- **The VRAM pre-flight knows a paired loss is twice the rows**, because chosen and
|
|
216
|
+
rejected go through the model as one tensor.
|
|
217
|
+
- **Honest cost:** the reference is free in *memory*, not in *time* — DPO reads the
|
|
218
|
+
layer stack **1.52×** as often per step as supervised fine-tuning does.
|
|
219
|
+
- `grpo` / `ppo` stay excluded on purpose: generation re-reads every layer per token,
|
|
220
|
+
which is exactly what streaming cannot amortise.
|
|
221
|
+
- Still BETA.
|
|
214
222
|
|
|
215
223
|
```yaml
|
|
216
224
|
# soup.yaml — then just `soup train --config soup.yaml`
|
|
217
225
|
training:
|
|
218
|
-
stream_layers: true # base streams
|
|
226
|
+
stream_layers: true # base streams out of VRAM; only the adapter trains
|
|
219
227
|
quantization: 4bit # NF4 — ~4x smaller store, so 8B fits a 4 GB card
|
|
220
|
-
batch_size:
|
|
228
|
+
batch_size: 4 # v0.72.3: bigger batches amortise the weight read
|
|
229
|
+
stream_source: auto # RAM when it fits, NVMe disk when it does not
|
|
221
230
|
```
|
|
222
231
|
|
|
223
232
|
> **Trained with `stream_layers: true` on v0.72.0?** That adapter is inert — its tensors were
|
|
@@ -499,17 +508,15 @@ single 4 GB laptop, which is why every performance number in these docs is measu
|
|
|
499
508
|
claimed.
|
|
500
509
|
|
|
501
510
|
If Soup saved you a training run, [starring the repo](https://github.com/MakazhanAlpamys/Soup)
|
|
502
|
-
helps most, and it costs nothing.
|
|
511
|
+
helps most, and it costs nothing.
|
|
503
512
|
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
Donations fund GPU time for the hardware-gated work — multi-GPU, 8B+ validation, Apple
|
|
510
|
-
Silicon — that a single 4 GB laptop cannot reach. See the
|
|
513
|
+
The next most useful thing is **hardware**. Multi-GPU, 8B+ validation, and Apple Silicon are
|
|
514
|
+
the parts a single 4 GB laptop cannot reach, so they ship behind honest "requires <hardware>"
|
|
515
|
+
gates instead of unverified claims. If you have access to a bigger box — or GPU credits going
|
|
516
|
+
unused — running one of the
|
|
511
517
|
[`help wanted`](https://github.com/MakazhanAlpamys/Soup/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22)
|
|
512
|
-
issues
|
|
518
|
+
issues and posting the numbers moves Soup further than anything else. Those issues say exactly
|
|
519
|
+
what is blocked on hardware today.
|
|
513
520
|
|
|
514
521
|
## Contributors
|
|
515
522
|
|
|
@@ -518,6 +525,47 @@ Built by the community ❤️ — thank you to everyone who has contributed. See
|
|
|
518
525
|
|
|
519
526
|
[](https://github.com/MakazhanAlpamys/Soup/graphs/contributors)
|
|
520
527
|
|
|
528
|
+
## Contact
|
|
529
|
+
|
|
530
|
+
Bugs and feature requests belong in the
|
|
531
|
+
[issue tracker](https://github.com/MakazhanAlpamys/Soup/issues), questions in
|
|
532
|
+
[Discussions](https://github.com/MakazhanAlpamys/Soup/discussions) — both get answered faster
|
|
533
|
+
and help the next person with the same problem.
|
|
534
|
+
|
|
535
|
+
For live chat, setup help, and everything that reads better as a conversation, join the
|
|
536
|
+
[Discord](https://discord.gg/8RgVbFA6Zq). Anything that should still be findable in six months
|
|
537
|
+
belongs in Issues or Discussions — a Discord answer helps one person, an issue helps everyone
|
|
538
|
+
who hits the same thing. The [Code of Conduct](CODE_OF_CONDUCT.md) applies there too.
|
|
539
|
+
|
|
540
|
+
For anything that does not fit in public — security reports (see [SECURITY.md](SECURITY.md)),
|
|
541
|
+
Code of Conduct matters, or press — email **team@trysoup.dev**. That is the project address
|
|
542
|
+
and the right one for anything Soup-related. **makazanalpamys@gmail.com** is the maintainer's
|
|
543
|
+
personal address; it reaches the same person and is a fine fallback.
|
|
544
|
+
|
|
545
|
+
## Citing Soup
|
|
546
|
+
|
|
547
|
+
Layer streaming — training an 8B model on a 4 GB laptop GPU by streaming the frozen base from
|
|
548
|
+
host RAM one decoder layer at a time — is described in a preprint, together with the correctness
|
|
549
|
+
protocol that verifies a streamed run is bit-exact against a resident one:
|
|
550
|
+
|
|
551
|
+
> Makazhan, A. (2026). *Exact Layer Streaming: LoRA Fine-Tuning of an 8B Model on a 4 GB Laptop
|
|
552
|
+
> GPU.* Zenodo. https://doi.org/10.5281/zenodo.21771064
|
|
553
|
+
|
|
554
|
+
The measurement records behind every number in it are in [`benchmarks/`](benchmarks/), published
|
|
555
|
+
as written — including the failures, the assumptions that turned out wrong, and the numbers that
|
|
556
|
+
were measured and then discarded.
|
|
557
|
+
|
|
558
|
+
```bibtex
|
|
559
|
+
@misc{makazhan2026exact,
|
|
560
|
+
title = {Exact Layer Streaming: LoRA Fine-Tuning of an 8B Model on a 4 GB Laptop GPU},
|
|
561
|
+
author = {Makazhan, Alpamys},
|
|
562
|
+
year = {2026},
|
|
563
|
+
publisher = {Zenodo},
|
|
564
|
+
doi = {10.5281/zenodo.21771064},
|
|
565
|
+
url = {https://doi.org/10.5281/zenodo.21771064}
|
|
566
|
+
}
|
|
567
|
+
```
|
|
568
|
+
|
|
521
569
|
## License
|
|
522
570
|
|
|
523
571
|
[Apache-2.0](LICENSE). Copyright © the Soup contributors.
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
<a href="#configuration">Config</a> ·
|
|
15
15
|
<a href="#documentation">Docs</a> ·
|
|
16
16
|
<a href="docs/commands.md">Commands</a> ·
|
|
17
|
-
<a href="docs/models.md">Models</a>
|
|
17
|
+
<a href="docs/models.md">Models</a> ·
|
|
18
|
+
<a href="https://discord.gg/8RgVbFA6Zq">Discord</a>
|
|
18
19
|
</p>
|
|
19
20
|
|
|
20
21
|
<p align="center">
|
|
@@ -25,6 +26,8 @@
|
|
|
25
26
|
<a href="https://github.com/MakazhanAlpamys/Soup/actions"><img src="https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/MakazhanAlpamys/65fdc943f85f3b2c46ecddb415c2b779/raw/soup_tests.json" alt="Tests"></a>
|
|
26
27
|
<a href="https://github.com/MakazhanAlpamys/Soup/actions"><img src="https://github.com/MakazhanAlpamys/Soup/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
27
28
|
<a href="https://trysoup.dev"><img src="https://img.shields.io/badge/website-trysoup.dev-blue" alt="Website"></a>
|
|
29
|
+
<a href="https://discord.gg/8RgVbFA6Zq"><img src="https://img.shields.io/badge/Discord-join-5865F2?logo=discord&logoColor=white" alt="Discord"></a>
|
|
30
|
+
<a href="https://doi.org/10.5281/zenodo.21771064"><img src="https://zenodo.org/badge/DOI/10.5281/zenodo.21771064.svg" alt="DOI"></a>
|
|
28
31
|
</p>
|
|
29
32
|
|
|
30
33
|
---
|
|
@@ -49,31 +52,36 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
49
52
|
|
|
50
53
|
## What's New
|
|
51
54
|
|
|
52
|
-
**v0.72.
|
|
53
|
-
streaming keeps the frozen base
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
- **
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
- **
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
55
|
+
**v0.72.4 — align on a laptop: DPO, ORPO, SimPO and KTO over layer streaming.** Layer
|
|
56
|
+
streaming keeps the frozen base out of VRAM and feeds it to the GPU one decoder layer at
|
|
57
|
+
a time. It used to support supervised fine-tuning only; now it runs the preference
|
|
58
|
+
losses too.
|
|
59
|
+
|
|
60
|
+
- **DPO's reference model is free.** DPO needs a reference to compare against, and a
|
|
61
|
+
second copy of the model would double memory and defeat the whole point. Soup uses
|
|
62
|
+
*the same streamed base with its adapters switched off* — one set of weights, one
|
|
63
|
+
stream. Measured on an RTX 3050 4 GB: streamed DPO peaked at **0.914×** the
|
|
64
|
+
supervised-fine-tuning peak. Forcing a real second model in the same test cost
|
|
65
|
+
**+730 MB — exactly one copy of the weights.**
|
|
66
|
+
- **KTO is not reference-free**, however it is usually described: it picks its reference
|
|
67
|
+
the same way DPO does, so it gets the same treatment. ORPO and SimPO genuinely are.
|
|
68
|
+
- **Bit-exact against a normal, non-streamed run** of the same loss — `0.0` difference,
|
|
69
|
+
the bar every release in this series has to clear.
|
|
70
|
+
- **The VRAM pre-flight knows a paired loss is twice the rows**, because chosen and
|
|
71
|
+
rejected go through the model as one tensor.
|
|
72
|
+
- **Honest cost:** the reference is free in *memory*, not in *time* — DPO reads the
|
|
73
|
+
layer stack **1.52×** as often per step as supervised fine-tuning does.
|
|
74
|
+
- `grpo` / `ppo` stay excluded on purpose: generation re-reads every layer per token,
|
|
75
|
+
which is exactly what streaming cannot amortise.
|
|
76
|
+
- Still BETA.
|
|
70
77
|
|
|
71
78
|
```yaml
|
|
72
79
|
# soup.yaml — then just `soup train --config soup.yaml`
|
|
73
80
|
training:
|
|
74
|
-
stream_layers: true # base streams
|
|
81
|
+
stream_layers: true # base streams out of VRAM; only the adapter trains
|
|
75
82
|
quantization: 4bit # NF4 — ~4x smaller store, so 8B fits a 4 GB card
|
|
76
|
-
batch_size:
|
|
83
|
+
batch_size: 4 # v0.72.3: bigger batches amortise the weight read
|
|
84
|
+
stream_source: auto # RAM when it fits, NVMe disk when it does not
|
|
77
85
|
```
|
|
78
86
|
|
|
79
87
|
> **Trained with `stream_layers: true` on v0.72.0?** That adapter is inert — its tensors were
|
|
@@ -355,17 +363,15 @@ single 4 GB laptop, which is why every performance number in these docs is measu
|
|
|
355
363
|
claimed.
|
|
356
364
|
|
|
357
365
|
If Soup saved you a training run, [starring the repo](https://github.com/MakazhanAlpamys/Soup)
|
|
358
|
-
helps most, and it costs nothing.
|
|
366
|
+
helps most, and it costs nothing.
|
|
359
367
|
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
Donations fund GPU time for the hardware-gated work — multi-GPU, 8B+ validation, Apple
|
|
366
|
-
Silicon — that a single 4 GB laptop cannot reach. See the
|
|
368
|
+
The next most useful thing is **hardware**. Multi-GPU, 8B+ validation, and Apple Silicon are
|
|
369
|
+
the parts a single 4 GB laptop cannot reach, so they ship behind honest "requires <hardware>"
|
|
370
|
+
gates instead of unverified claims. If you have access to a bigger box — or GPU credits going
|
|
371
|
+
unused — running one of the
|
|
367
372
|
[`help wanted`](https://github.com/MakazhanAlpamys/Soup/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22)
|
|
368
|
-
issues
|
|
373
|
+
issues and posting the numbers moves Soup further than anything else. Those issues say exactly
|
|
374
|
+
what is blocked on hardware today.
|
|
369
375
|
|
|
370
376
|
## Contributors
|
|
371
377
|
|
|
@@ -374,6 +380,47 @@ Built by the community ❤️ — thank you to everyone who has contributed. See
|
|
|
374
380
|
|
|
375
381
|
[](https://github.com/MakazhanAlpamys/Soup/graphs/contributors)
|
|
376
382
|
|
|
383
|
+
## Contact
|
|
384
|
+
|
|
385
|
+
Bugs and feature requests belong in the
|
|
386
|
+
[issue tracker](https://github.com/MakazhanAlpamys/Soup/issues), questions in
|
|
387
|
+
[Discussions](https://github.com/MakazhanAlpamys/Soup/discussions) — both get answered faster
|
|
388
|
+
and help the next person with the same problem.
|
|
389
|
+
|
|
390
|
+
For live chat, setup help, and everything that reads better as a conversation, join the
|
|
391
|
+
[Discord](https://discord.gg/8RgVbFA6Zq). Anything that should still be findable in six months
|
|
392
|
+
belongs in Issues or Discussions — a Discord answer helps one person, an issue helps everyone
|
|
393
|
+
who hits the same thing. The [Code of Conduct](CODE_OF_CONDUCT.md) applies there too.
|
|
394
|
+
|
|
395
|
+
For anything that does not fit in public — security reports (see [SECURITY.md](SECURITY.md)),
|
|
396
|
+
Code of Conduct matters, or press — email **team@trysoup.dev**. That is the project address
|
|
397
|
+
and the right one for anything Soup-related. **makazanalpamys@gmail.com** is the maintainer's
|
|
398
|
+
personal address; it reaches the same person and is a fine fallback.
|
|
399
|
+
|
|
400
|
+
## Citing Soup
|
|
401
|
+
|
|
402
|
+
Layer streaming — training an 8B model on a 4 GB laptop GPU by streaming the frozen base from
|
|
403
|
+
host RAM one decoder layer at a time — is described in a preprint, together with the correctness
|
|
404
|
+
protocol that verifies a streamed run is bit-exact against a resident one:
|
|
405
|
+
|
|
406
|
+
> Makazhan, A. (2026). *Exact Layer Streaming: LoRA Fine-Tuning of an 8B Model on a 4 GB Laptop
|
|
407
|
+
> GPU.* Zenodo. https://doi.org/10.5281/zenodo.21771064
|
|
408
|
+
|
|
409
|
+
The measurement records behind every number in it are in [`benchmarks/`](benchmarks/), published
|
|
410
|
+
as written — including the failures, the assumptions that turned out wrong, and the numbers that
|
|
411
|
+
were measured and then discarded.
|
|
412
|
+
|
|
413
|
+
```bibtex
|
|
414
|
+
@misc{makazhan2026exact,
|
|
415
|
+
title = {Exact Layer Streaming: LoRA Fine-Tuning of an 8B Model on a 4 GB Laptop GPU},
|
|
416
|
+
author = {Makazhan, Alpamys},
|
|
417
|
+
year = {2026},
|
|
418
|
+
publisher = {Zenodo},
|
|
419
|
+
doi = {10.5281/zenodo.21771064},
|
|
420
|
+
url = {https://doi.org/10.5281/zenodo.21771064}
|
|
421
|
+
}
|
|
422
|
+
```
|
|
423
|
+
|
|
377
424
|
## License
|
|
378
425
|
|
|
379
426
|
[Apache-2.0](LICENSE). Copyright © the Soup contributors.
|
|
@@ -17,6 +17,9 @@ for anything security-sensitive.
|
|
|
17
17
|
|
|
18
18
|
- Preferred: open a private report via
|
|
19
19
|
[GitHub Security Advisories](https://github.com/MakazhanAlpamys/Soup/security/advisories/new).
|
|
20
|
+
- If you cannot use GitHub, email **team@trysoup.dev** (the project address), or
|
|
21
|
+
**makazanalpamys@gmail.com** (the maintainer's personal address) if that bounces.
|
|
22
|
+
Please do not report security issues in Discord — it is a public channel.
|
|
20
23
|
|
|
21
24
|
We aim to acknowledge reports within 5 business days and to ship a fix or
|
|
22
25
|
mitigation for confirmed, in-scope issues as promptly as is practical. When
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Measurement records
|
|
2
|
+
|
|
3
|
+
Raw gate records for Soup's layer-streaming feature, published as written.
|
|
4
|
+
|
|
5
|
+
These are not a report assembled after the fact. They are the working records
|
|
6
|
+
kept while each item was built and verified, so they contain the failures, the
|
|
7
|
+
assumptions that turned out wrong, and the numbers that were measured and then
|
|
8
|
+
discarded — in the order those things happened.
|
|
9
|
+
|
|
10
|
+
They are the evidence behind the preprint:
|
|
11
|
+
|
|
12
|
+
> Makazhan, A. (2026). *Exact Layer Streaming: LoRA Fine-Tuning of an 8B Model
|
|
13
|
+
> on a 4 GB Laptop GPU.* Zenodo.
|
|
14
|
+
> [10.5281/zenodo.21771064](https://doi.org/10.5281/zenodo.21771064)
|
|
15
|
+
|
|
16
|
+
| File | What it gates | Headline |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| [`gate-v0.72.0-layer-streaming.md`](gate-v0.72.0-layer-streaming.md) | The streaming path itself | Bit-exactness vs a resident reference; 3B bf16 trained on a 4 GB card |
|
|
19
|
+
| [`gate-v0.72.2-nf4.md`](gate-v0.72.2-nf4.md) | NF4 quantised streaming | Llama-3.1-8B at 119.6 tok/s in a 3.32 GB peak |
|
|
20
|
+
| [`gate-v0.72.3-breadth.md`](gate-v0.72.3-breadth.md) | Nine architectures, batching, accumulation, resume, disk tier | Peak-VRAM predictor at 0.85% worst-case error; accumulation is per-token I/O-neutral |
|
|
21
|
+
| [`gate-v0.72.4-preference-losses.md`](gate-v0.72.4-preference-losses.md) | DPO / ORPO / SimPO / KTO over the streaming engine | DPO's reference model costs no extra weights — 0.914x the SFT peak, against +730.44 MB for a real second instance |
|
|
22
|
+
|
|
23
|
+
## Hardware
|
|
24
|
+
|
|
25
|
+
Every number was measured on one machine:
|
|
26
|
+
|
|
27
|
+
- **GPU** — RTX 3050 Laptop, 4 GB (4.29 GB usable)
|
|
28
|
+
- **Host** — 16.9 GB RAM, NVMe
|
|
29
|
+
- **OS** — Windows 11
|
|
30
|
+
|
|
31
|
+
Windows/WDDM matters for reading these: it spills into shared host memory rather
|
|
32
|
+
than raising `CUDA out of memory`, so a run completing is not evidence that its
|
|
33
|
+
configuration fits. That is why peak VRAM is reported alongside every throughput
|
|
34
|
+
figure, and why the fit decision refuses rather than warns.
|
|
35
|
+
|
|
36
|
+
## Reading the numbers
|
|
37
|
+
|
|
38
|
+
- **Throughput is quoted with the SM clock it was taken at.** This card's boost
|
|
39
|
+
clock varies about 13% between sessions, so a fraction-of-ceiling stated
|
|
40
|
+
without its clock is not meaningful. Where a GEMM ceiling is compared against,
|
|
41
|
+
it was measured in the same session.
|
|
42
|
+
- **The correctness reference always matches the numerics under test** — a
|
|
43
|
+
streamed NF4 run is compared against a *resident NF4* run, never against
|
|
44
|
+
resident bf16, which would hide a real defect inside quantisation error.
|
|
45
|
+
- **Derived figures are labelled as arithmetic.** Where a line says "1M tokens =
|
|
46
|
+
2.3 h", that is division, not a measured wall-clock run.
|
|
47
|
+
|
|
48
|
+
## Reproducing
|
|
49
|
+
|
|
50
|
+
The implementation ships in Soup under Apache-2.0. Reproduction commands are in
|
|
51
|
+
Appendix A of the paper; the correctness protocol runs as part of the project's
|
|
52
|
+
test suite, so a regression in bit-exactness fails CI rather than reaching a
|
|
53
|
+
user.
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
pip install 'soup-cli[train]'
|
|
57
|
+
```
|