soup-cli 0.71.32__tar.gz → 0.71.34__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {soup_cli-0.71.32 → soup_cli-0.71.34}/CHANGELOG.md +115 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/CONTRIBUTING.md +1 -1
- {soup_cli-0.71.32 → soup_cli-0.71.34}/CONTRIBUTORS.md +2 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/PKG-INFO +35 -28
- {soup_cli-0.71.32 → soup_cli-0.71.34}/README.md +34 -27
- {soup_cli-0.71.32 → soup_cli-0.71.34}/docs/README.md +1 -1
- {soup_cli-0.71.32 → soup_cli-0.71.34}/docs/adapters-and-governance.md +8 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/docs/commands.md +8 -1
- {soup_cli-0.71.32 → soup_cli-0.71.34}/docs/peft-and-efficiency.md +19 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/docs/serving-and-export.md +47 -4
- {soup_cli-0.71.32 → soup_cli-0.71.34}/pyproject.toml +1 -1
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/cli.py +12 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/adapters.py +225 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/data.py +27 -11
- soup_cli-0.71.34/src/soup_cli/commands/draft.py +658 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/infer.py +59 -8
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/runs.py +17 -12
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/serve.py +189 -41
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/shrink.py +2 -52
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/train.py +38 -17
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/config/loader.py +7 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/config/schema.py +135 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/loader.py +20 -4
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/asr.py +45 -1
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/distill.py +15 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/mlx_sft.py +8 -1
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/sft.py +18 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/ui/app.py +8 -2
- soup_cli-0.71.34/src/soup_cli/utils/adapter_arithmetic.py +288 -0
- soup_cli-0.71.34/src/soup_cli/utils/adapter_fuse.py +128 -0
- soup_cli-0.71.34/src/soup_cli/utils/draft.py +551 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/gpu.py +18 -2
- soup_cli-0.71.34/src/soup_cli/utils/lisa.py +213 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/lr_finder.py +7 -7
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/paths.py +11 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/peft_wiring.py +26 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/prm_reward.py +73 -4
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/spec_pairing.py +22 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/strict_safetensors.py +66 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/vllm.py +7 -2
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/vscode_setup.py +12 -22
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_code_review_high.py +24 -9
- soup_cli-0.71.34/tests/test_review_fixes_v07133.py +662 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07130.py +21 -5
- soup_cli-0.71.34/tests/test_v07133.py +1858 -0
- soup_cli-0.71.34/tests/test_v07134.py +1041 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_vision.py +27 -9
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_vllm_serve.py +1 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/.dockerignore +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/.github/FUNDING.yml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/.github/pull_request_template.md +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/.gitignore +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/.mailmap +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/AGENTS.md +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/CODEOWNERS +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/Dockerfile +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/LICENSE +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/NOTICE +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/SECURITY.md +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/docker-compose.yml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/docs/backends-and-ops.md +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/docs/data.md +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/docs/evaluation.md +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/docs/models.md +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/docs/performance-and-quantization.md +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/docs/training.md +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/examples/README.md +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/examples/reward_hacking/rewards.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/soup.png +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/soup_logo_svg.svg +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/cloud/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/cloud/modal.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/_eval_v0650.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/_eval_v07110.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/advise.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/data_doctor.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/diagnose.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/mcp.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/ra_dit.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/ship.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/spectrum.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/envs/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/envs/_common.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/envs/calculator.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/envs/guess_number.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/envs/retrieval_qa.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/mcp_server/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/mcp_server/registry.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/mcp_server/server.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/recipes/catalog.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/registry/store.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/bitnet.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/grpo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/mole_routing.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/online_dpo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/ppo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/raft.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/tts.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/advise.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/agent_sandbox.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/asr_metrics.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/best_of_n.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/data_doctor.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/data_lint.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/citation.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/live.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/edit_kernels.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/evolve.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/harm_probe.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/hubs.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/interference_live.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/live_eval.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/mod.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/probe_kernel.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/ra_dit_run.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/raft.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/reward_hack_control.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/rl_checkpoint.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/ship_verdict.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/shrink.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/spectrum_scan.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/truth_probe.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/tts_codec.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/unlearn_kernels.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/templates/chat.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/templates/code.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/templates/medical.yaml +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/__init__.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/conftest.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/qa/v07114_qa.md +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_adapters.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_audio.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_autopilot.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_bco.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_bench.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_build_dag.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_callback.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_cans.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_chat.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_chat_template.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_cli.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_code_review_critical.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_code_review_deferred.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_code_review_medium_low.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_code_review_recurring.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_config.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_cost.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_curriculum.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_data.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_data_augment.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_data_sample.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_data_split.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_data_tools.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_diff.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_display.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_doctor.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_embedding.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_errors.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_eval.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_export.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_formats.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_generate.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_gpu.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_grpo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_infer.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_init.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_ipo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_kto.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_loader.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_log_level.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_merge.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_migrate.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_moe.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_orpo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_packing.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_part_a_wave1.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_part_d.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_part_e.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_performance.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_ppo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_pretrain.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_profile.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_profiling.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_progress.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_push.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_qat.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_quant_check.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_quickstart.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_recipes.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_registry.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_relora.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_replay.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_resume.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_rlvr.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_run_cost.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_runs.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_serve.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_server_generate.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_simpo.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_sweep.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_tracker.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_training_speed.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_tui.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_ui.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_unsloth.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0420.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0450.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0490.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0510.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0520.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0530.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v05310.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v05311.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0532.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0533.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0534.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0535.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0536.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0537.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0538.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0539.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0540.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0550.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0560.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0580.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0590.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07110.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07111.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07112.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07113.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07114.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07115.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07116.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07117.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07118.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07119.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0712.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07120.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07121.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07122.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07123.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07124.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07125.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07126.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07127.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07128.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07129.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0713.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07131.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v07132.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0714.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0715.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0716.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0717.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0718.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_v0719.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_validator.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_warmup.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_why.py +0 -0
- {soup_cli-0.71.32 → soup_cli-0.71.34}/tests/test_windows_encoding.py +0 -0
|
@@ -12,6 +12,121 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.71.34] - 2026-07-15
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- **`soup adapters arithmetic` — task-vector algebra over LoRA adapters (add / scale / negate).**
|
|
19
|
+
Apply task arithmetic (arXiv:2212.04089) to LoRA deltas via an expression such as
|
|
20
|
+
`"coder + 0.5*math - toxic"`, mapping names to adapter dirs with repeatable
|
|
21
|
+
`--adapter name=path`. Produces one merged adapter you can serve or merge.
|
|
22
|
+
- Signed, un-normalized element-wise combine over same-rank adapters; the effective
|
|
23
|
+
delta `ΔW = B @ A` scales **linearly** with each coefficient (negation flips the
|
|
24
|
+
delta, `0.5·` halves it) via a √|c| factor split — not the `c²` a naive sum gives.
|
|
25
|
+
Mixed-rank inputs are refused with a clear "harmonize rank" message.
|
|
26
|
+
- Reuses the backdoor-scan gate (refuses a FAIL-scanned input unless `--allow-unscanned`)
|
|
27
|
+
and a same-base-model check (`--allow-cross-base` to override). Hand-written expression
|
|
28
|
+
parser (no `eval`), cwd-contained/symlink-rejecting paths, exit 0 = ok / 1 = refusal.
|
|
29
|
+
- **LISA — Layerwise Importance Sampled AdamW (arXiv:2403.17919).** Full-fine-tuning
|
|
30
|
+
quality at LoRA-like memory: every N steps LISA freezes all decoder layers except a
|
|
31
|
+
small random set (embeddings + head always trainable). Enable with
|
|
32
|
+
`training.lisa_enabled: true` (+ `lisa_num_layers`, `lisa_interval_steps`) on a
|
|
33
|
+
`task: sft`, transformers, text, `quantization: none` run; mutually exclusive with
|
|
34
|
+
LoRA features and the other freeze mechanisms. Live on a 4 GB GPU for small models.
|
|
35
|
+
|
|
36
|
+
## [0.71.33] - 2026-07-13
|
|
37
|
+
|
|
38
|
+
### Added
|
|
39
|
+
- **`soup draft` — train and, above all, MEASURE a speculative-decoding draft model.**
|
|
40
|
+
- `soup draft measure --target <m> --draft <d> --prompts p.jsonl` reports a draft's
|
|
41
|
+
**acceptance rate** (the fraction of the target's own greedy tokens the draft
|
|
42
|
+
would have proposed correctly) plus **real plain-vs-assisted throughput**. This is
|
|
43
|
+
the honest gate: it tells you whether speculative decoding is worth enabling
|
|
44
|
+
*before* you ship it. Exit 0 / 2 (below `--min-acceptance`, for CI) / 1.
|
|
45
|
+
- `soup draft distill --target <tuned> --draft-base <tiny> --data d.jsonl -o draft/`
|
|
46
|
+
distils your target into the tiny base (logit KD via the existing `task: distill`
|
|
47
|
+
trainer) and emits a **dense** draft model, ready to load as an `assistant_model`.
|
|
48
|
+
- `soup draft list`, plus a local draft registry (`~/.soup/drafts.json`) that
|
|
49
|
+
`soup serve --auto-spec` consults **before** the built-in pairing table — so a
|
|
50
|
+
draft you trained yourself is picked up automatically.
|
|
51
|
+
- Draft and target must share a tokenizer; a mismatched pair is refused up front
|
|
52
|
+
(speculative decoding proposes draft token ids into the target's vocabulary, so a
|
|
53
|
+
mismatch silently produces garbage rather than failing).
|
|
54
|
+
|
|
55
|
+
**Read the measured results before you use this** — see *Known limitations* below.
|
|
56
|
+
On the validated pair, distillation did **not** improve acceptance, and speculative
|
|
57
|
+
decoding was a net **slowdown**. `soup draft measure` is what tells you that.
|
|
58
|
+
|
|
59
|
+
### Known limitations
|
|
60
|
+
- **Distilling a draft did not improve its acceptance rate on the validated pair.**
|
|
61
|
+
Measured on `SmolLM2-360M-Instruct` (target) with a `SmolLM2-135M-Instruct` draft:
|
|
62
|
+
the *stock* draft already scored **69.3%**, and distilling it moved that to 69.7%
|
|
63
|
+
after 2 epochs and back to **69.3%** after 10 epochs — i.e. no gain beyond noise.
|
|
64
|
+
A small same-family draft is already near its capacity ceiling for agreeing with
|
|
65
|
+
the target, and logit KD cannot buy capacity it does not have. Whether distillation
|
|
66
|
+
materially raises acceptance for a genuinely diverged fine-tune, or a larger
|
|
67
|
+
target/draft pair, is **unproven** on a 4 GB box — tracked as a scale issue.
|
|
68
|
+
- **Speculative decoding was a net slowdown on that pair** (measured 0.55–0.64×): the
|
|
69
|
+
draft's forward pass costs more than the tokens it saves at this size.
|
|
70
|
+
`soup draft measure` reports this truthfully rather than assuming a speedup — which
|
|
71
|
+
is precisely the point of shipping the measurement.
|
|
72
|
+
- **Acceptance is teacher-forced greedy agreement**, the metric the Medusa/EAGLE
|
|
73
|
+
papers report. It is exact and deterministic, and it is the right number for
|
|
74
|
+
comparing drafts — but it is not the accepted-token count of a *sampling* run, which
|
|
75
|
+
also depends on the rejection-resample cascade.
|
|
76
|
+
- **Same-tokenizer only.** Cross-tokenizer drafts (ULD-aligned + universal assisted
|
|
77
|
+
decoding) are deferred.
|
|
78
|
+
|
|
79
|
+
### Changed
|
|
80
|
+
- **PRM-guided GRPO scores completions in a single batched forward.**
|
|
81
|
+
`PRMScorer.__call__` now right-pads all completions into one `[B, T]` tensor
|
|
82
|
+
(+ attention mask) and runs one `output_hidden_states` pass instead of one
|
|
83
|
+
forward per completion, cutting per-step reward latency on non-tiny models.
|
|
84
|
+
Numerically identical to the per-completion path (parity + mixed-length tests).
|
|
85
|
+
Closes #298
|
|
86
|
+
([#301](https://github.com/MakazhanAlpamys/Soup/pull/301) by [@Ekaanksh-dev](https://github.com/Ekaanksh-dev)).
|
|
87
|
+
|
|
88
|
+
### Fixed
|
|
89
|
+
- **The hardware-fit gate no longer refuses to train small models.**
|
|
90
|
+
`model_size_from_name` did not understand an `M` (millions) suffix, so
|
|
91
|
+
`SmolLM2-135M` fell through to the 7B default, was predicted to need ~14 GB of
|
|
92
|
+
weights, and was blocked. Every draft-sized model hit this. `1.7B` was also being
|
|
93
|
+
read as `7B` (the `7b` marker matched inside `1.7b`), while `Qwen2.5-7B-Instruct-1M`
|
|
94
|
+
correctly stays 7B (1M is the *context*, not the parameter count).
|
|
95
|
+
- **`soup serve --backend vllm` no longer force-enables `trust_remote_code`.** The
|
|
96
|
+
vLLM path now goes through the same `--trust-remote-code` default-deny gate (and
|
|
97
|
+
warning panel) as the transformers backend, so serving an untrusted repo never
|
|
98
|
+
executes its code silently.
|
|
99
|
+
- **Multi-adapter serving (`soup serve --adapters name=path`) now actually switches
|
|
100
|
+
adapters.** The named adapters are loaded into the model and selected per request
|
|
101
|
+
(via `POST /v1/adapters/activate/{name}` or the request `adapter` field);
|
|
102
|
+
previously every request silently ran the startup model. The base model is served
|
|
103
|
+
when no adapter is selected.
|
|
104
|
+
- **Vision datasets reject out-of-directory image paths.** `llava` / `sharegpt4v`
|
|
105
|
+
rows are containment-checked against `image_dir` (mirroring the audio loader), so a
|
|
106
|
+
crafted `{"image": "/etc/passwd"}` row can no longer read arbitrary local files.
|
|
107
|
+
- **`soup train --dry-run --gpus N` no longer launches a real multi-GPU run.** The
|
|
108
|
+
accelerate re-exec is skipped under `--dry-run`. The re-exec also now forwards
|
|
109
|
+
`--minillm-on-policy`, `--capture-activations`, and `--capture-prompts` (previously
|
|
110
|
+
dropped on multi-GPU runs).
|
|
111
|
+
- **MLX SFT now builds a real optimizer** (`AdamW` from the configured LR) instead of
|
|
112
|
+
passing `optimizer=None`, which left the model untrained.
|
|
113
|
+
- **`soup data inspect` / `preview` / `search` escape dataset- and Hub-derived text**
|
|
114
|
+
so a stray `[/]` no longer crashes the command and a crafted `[link=…]` tag can't
|
|
115
|
+
render a phishing hyperlink. `soup runs` list/show escape config-derived fields too.
|
|
116
|
+
- **`soup infer --task asr` hardening** — an oversized reference no longer crashes the
|
|
117
|
+
whole batch after transcription (that row's metric is skipped); an all-skipped run
|
|
118
|
+
exits non-zero instead of reporting success; `--asr-task` is validated upfront; and
|
|
119
|
+
dataset-derived filenames are control-stripped before printing. ASR training now
|
|
120
|
+
caps transcript labels to Whisper's decoder limit, warns on >30 s audio, and picks
|
|
121
|
+
fp16 on pre-Ampere GPUs instead of hardcoding bf16.
|
|
122
|
+
- **Knowledge-distillation KD term aligns with the CE term.** The token-level
|
|
123
|
+
divergence is now computed over causal-shifted positions, so the distillation signal
|
|
124
|
+
covers exactly the trained tokens (previously off by one).
|
|
125
|
+
- **Miscellaneous robustness** — `load_config_from_string` raises `ValueError` (not
|
|
126
|
+
`TypeError`) on a non-mapping YAML document; the Web UI Bearer-token check is
|
|
127
|
+
constant-time; and `soup doctor --vscode` / the LR-finder report use the centralised
|
|
128
|
+
atomic, symlink-rejecting writer.
|
|
129
|
+
|
|
15
130
|
## [0.71.32] - 2026-07-07
|
|
16
131
|
|
|
17
132
|
### Added
|
|
@@ -120,7 +120,7 @@ src/soup_cli/
|
|
|
120
120
|
templates/ - 17 built-in soup.yaml templates (YAML + manifest.json) with load_template loader (v0.39.0, +bco v0.40.0)
|
|
121
121
|
ui/ - Web UI (FastAPI + HTML/JS SPA)
|
|
122
122
|
|
|
123
|
-
tests/ - Test suite (
|
|
123
|
+
tests/ - Test suite (312 files, 15906 tests)
|
|
124
124
|
examples/ - Real-world config examples and datasets
|
|
125
125
|
```
|
|
126
126
|
|
|
@@ -50,6 +50,8 @@ Listed by first contribution. PR numbers link the work.
|
|
|
50
50
|
- Reuse the shared vocab-expansion helper in the vision + audio SFT paths ([#291](https://github.com/MakazhanAlpamys/Soup/pull/291))
|
|
51
51
|
- Honor configured vocab expansion in the DPO / IPO / KTO / BCO trainers ([#293](https://github.com/MakazhanAlpamys/Soup/pull/293))
|
|
52
52
|
- Honor configured vocab expansion in the ORPO / SimPO / GRPO trainers ([#295](https://github.com/MakazhanAlpamys/Soup/pull/295))
|
|
53
|
+
- **Ekaanksh Patil** ([@Ekaanksh-dev](https://github.com/Ekaanksh-dev))
|
|
54
|
+
- Batch the PRM reward forward pass in `PRMScorer.__call__` (single `[B, T]` forward) ([#301](https://github.com/MakazhanAlpamys/Soup/pull/301))
|
|
53
55
|
|
|
54
56
|
---
|
|
55
57
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: soup-cli
|
|
3
|
-
Version: 0.71.
|
|
3
|
+
Version: 0.71.34
|
|
4
4
|
Summary: Fine-tune and post-train LLMs in one command. No SSH, no config hell.
|
|
5
5
|
Project-URL: Homepage, https://github.com/MakazhanAlpamys/Soup
|
|
6
6
|
Project-URL: Repository, https://github.com/MakazhanAlpamys/Soup
|
|
@@ -193,35 +193,42 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
193
193
|
|
|
194
194
|
## What's New
|
|
195
195
|
|
|
196
|
-
**v0.71.
|
|
197
|
-
|
|
198
|
-
- **`task='asr'`.** A new `AsrTrainerWrapper` (HF `Seq2SeqTrainer` + `WhisperProcessor`). Data rows
|
|
199
|
-
are `{"audio": <path>, "text": <transcript>}` under `data.format='asr'`; audio decodes to 16 kHz
|
|
200
|
-
mono through the hardened loader (soundfile pre-probe + symlink/size guards). Opt-in LoRA on q/v
|
|
201
|
-
via `training.asr_lora: true` (default full fine-tune); `training.asr_language` / `asr_task`
|
|
202
|
-
(`transcribe`|`translate`) set — and persist — the decoder prefix for inference.
|
|
203
|
-
- **`soup infer --task asr`.** Transcribe an `{"audio"[, "text"]}` JSONL and get per-row + corpus
|
|
204
|
-
**WER / CER** when references are present. Loads a full model or a LoRA adapter dir; audio paths
|
|
205
|
-
are containment-checked (traversal / UNC rejected).
|
|
206
|
-
- **Pure-python metrics.** New `soup_cli.utils.asr_metrics` (WER / CER / `word_accuracy` /
|
|
207
|
-
`corpus_wer`) — no new dependency, reusable as a higher-is-better ship metric leg.
|
|
208
|
-
- **Recipes.** `whisper-tiny-asr` / `whisper-base-asr` (live-trainable), `whisper-large-v3-asr`
|
|
209
|
-
(parse-only). Catalog 138 → 142.
|
|
210
|
-
- **Proof-of-mechanism, honestly.** Live-validated on an RTX 3050: a memorization task drove
|
|
211
|
-
WER 1.000 → 0.000 (loss 7.2 → 0.0005 at 0.4/4 GB). Real accent/domain gains need real audio;
|
|
212
|
-
WER/CER use a light normalizer, not the full Whisper text normalizer.
|
|
196
|
+
**v0.71.34 — adapter algebra + LISA.** Compose fine-tunes like vectors, and train big-model quality on a small-model memory budget.
|
|
213
197
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
198
|
+
- **`soup adapters arithmetic "coder + 0.5*math - toxic"`.** Task-vector algebra over LoRA
|
|
199
|
+
adapters (arXiv:2212.04089) — **add, scale, and NEGATE** trained behaviours into one merged
|
|
200
|
+
adapter. The math is done right: a LoRA's effective delta `ΔW = B·A` scales *linearly* with
|
|
201
|
+
each coefficient (subtracting an adapter actually removes its behaviour), not quadratically.
|
|
202
|
+
Same-base + backdoor-scan gated; mixed ranks refused with a clear message.
|
|
203
|
+
- **LISA — layerwise importance sampling (`training.lisa_enabled`).** Full-fine-tuning quality
|
|
204
|
+
at LoRA-like memory (arXiv:2403.17919): every N steps LISA re-activates a small random set of
|
|
205
|
+
decoder layers (embeddings + head always on) and freezes the rest. Live on a 4 GB GPU.
|
|
206
|
+
- **Verified on real models (RTX 3050).** LISA trains SmolLM2-135M end-to-end; `2·a` produces an
|
|
207
|
+
adapter whose ΔW is *exactly* 2× the original's — the merged adapter loads and serves.
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
soup adapters arithmetic "coder - toxic" \
|
|
211
|
+
--adapter coder=./coder-lora --adapter toxic=./toxic-lora -o ./cleaned
|
|
212
|
+
|
|
213
|
+
soup train --config sft.yaml # with training.lisa_enabled: true, lisa_num_layers: 2
|
|
223
214
|
```
|
|
224
215
|
|
|
216
|
+
<details>
|
|
217
|
+
<summary>Previous release — v0.71.33, <code>soup draft</code> (measure speculative decoding)</summary>
|
|
218
|
+
|
|
219
|
+
`soup draft measure` reports a draft model's **acceptance rate** + real plain-vs-assisted tok/s
|
|
220
|
+
(exit 0/2/1 for CI); `soup draft distill` distils your target into a dense tiny draft, auto-wired
|
|
221
|
+
into `soup serve --auto-spec`. The honest result on a small same-family pair: distillation didn't
|
|
222
|
+
move acceptance (69.3% → 69.3%) and assisted decoding was a net slowdown — which is exactly the
|
|
223
|
+
number you want *before* shipping speculative decoding.
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
soup draft measure --target ./my-tuned-model --draft HuggingFaceTB/SmolLM2-135M-Instruct \
|
|
227
|
+
--prompts prod-prompts.jsonl # -> acceptance %, real tok/s, ship-or-not
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
</details>
|
|
231
|
+
|
|
225
232
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
226
233
|
|
|
227
234
|
## Quick Start
|
|
@@ -301,7 +308,7 @@ The full feature reference lives in [`docs/`](docs/). Start here:
|
|
|
301
308
|
| [Performance & quantization](docs/performance-and-quantization.md) | QAT, FP8, Quant Menu (I + II), KV-cache, NVFP4, save formats, Cut Cross-Entropy, gradient checkpointing, kernels, activation offloading, multi-GPU / DeepSpeed / FSDP |
|
|
302
309
|
| [Data engineering](docs/data.md) | Formats, the Axolotl/LF-parity pipeline, data tools, synthetic generation & forge, quality scorecards, trace tooling, remote datasets, mixing, recipe DAGs |
|
|
303
310
|
| [Evaluation & probes](docs/evaluation.md) | Eval design/gate, eval-gated training, benchmarks, NLG metrics, calibration, Elo arena, diagnose, post-train X-ray probes, A/B, drift, tunability, `soup advise` |
|
|
304
|
-
| [Serving & export](docs/serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding, deploy autopilot, Web UI, Agent Forge |
|
|
311
|
+
| [Serving & export](docs/serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding (train + measure your own draft), deploy autopilot, Web UI, Agent Forge |
|
|
305
312
|
| [Adapters, registry & governance](docs/adapters-and-governance.md) | Adapter lifecycle/management, model registry, Soup Cans, the data flywheel (`soup loop`), knowledge editing, steering, supply-chain controls (scan/sign/BOM/attest/audit/airgap) |
|
|
306
313
|
| [Backends, platform & ops](docs/backends-and-ops.md) | MLX/Unsloth backends, alternative hubs, HF Hub integration, autopilot, experiment tracking, plan/apply, env lockfiles, hardware-fit, completions, plugins, utility commands |
|
|
307
314
|
| [Command reference](docs/commands.md) | The full `soup` command list |
|
|
@@ -49,35 +49,42 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
49
49
|
|
|
50
50
|
## What's New
|
|
51
51
|
|
|
52
|
-
**v0.71.
|
|
53
|
-
|
|
54
|
-
- **`
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
- **
|
|
63
|
-
|
|
64
|
-
- **Recipes.** `whisper-tiny-asr` / `whisper-base-asr` (live-trainable), `whisper-large-v3-asr`
|
|
65
|
-
(parse-only). Catalog 138 → 142.
|
|
66
|
-
- **Proof-of-mechanism, honestly.** Live-validated on an RTX 3050: a memorization task drove
|
|
67
|
-
WER 1.000 → 0.000 (loss 7.2 → 0.0005 at 0.4/4 GB). Real accent/domain gains need real audio;
|
|
68
|
-
WER/CER use a light normalizer, not the full Whisper text normalizer.
|
|
52
|
+
**v0.71.34 — adapter algebra + LISA.** Compose fine-tunes like vectors, and train big-model quality on a small-model memory budget.
|
|
53
|
+
|
|
54
|
+
- **`soup adapters arithmetic "coder + 0.5*math - toxic"`.** Task-vector algebra over LoRA
|
|
55
|
+
adapters (arXiv:2212.04089) — **add, scale, and NEGATE** trained behaviours into one merged
|
|
56
|
+
adapter. The math is done right: a LoRA's effective delta `ΔW = B·A` scales *linearly* with
|
|
57
|
+
each coefficient (subtracting an adapter actually removes its behaviour), not quadratically.
|
|
58
|
+
Same-base + backdoor-scan gated; mixed ranks refused with a clear message.
|
|
59
|
+
- **LISA — layerwise importance sampling (`training.lisa_enabled`).** Full-fine-tuning quality
|
|
60
|
+
at LoRA-like memory (arXiv:2403.17919): every N steps LISA re-activates a small random set of
|
|
61
|
+
decoder layers (embeddings + head always on) and freezes the rest. Live on a 4 GB GPU.
|
|
62
|
+
- **Verified on real models (RTX 3050).** LISA trains SmolLM2-135M end-to-end; `2·a` produces an
|
|
63
|
+
adapter whose ΔW is *exactly* 2× the original's — the merged adapter loads and serves.
|
|
69
64
|
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
audio_dir: ./data/audio
|
|
76
|
-
training:
|
|
77
|
-
asr_language: en
|
|
78
|
-
asr_lora: true # optional; default = full fine-tune
|
|
65
|
+
```bash
|
|
66
|
+
soup adapters arithmetic "coder - toxic" \
|
|
67
|
+
--adapter coder=./coder-lora --adapter toxic=./toxic-lora -o ./cleaned
|
|
68
|
+
|
|
69
|
+
soup train --config sft.yaml # with training.lisa_enabled: true, lisa_num_layers: 2
|
|
79
70
|
```
|
|
80
71
|
|
|
72
|
+
<details>
|
|
73
|
+
<summary>Previous release — v0.71.33, <code>soup draft</code> (measure speculative decoding)</summary>
|
|
74
|
+
|
|
75
|
+
`soup draft measure` reports a draft model's **acceptance rate** + real plain-vs-assisted tok/s
|
|
76
|
+
(exit 0/2/1 for CI); `soup draft distill` distils your target into a dense tiny draft, auto-wired
|
|
77
|
+
into `soup serve --auto-spec`. The honest result on a small same-family pair: distillation didn't
|
|
78
|
+
move acceptance (69.3% → 69.3%) and assisted decoding was a net slowdown — which is exactly the
|
|
79
|
+
number you want *before* shipping speculative decoding.
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
soup draft measure --target ./my-tuned-model --draft HuggingFaceTB/SmolLM2-135M-Instruct \
|
|
83
|
+
--prompts prod-prompts.jsonl # -> acceptance %, real tok/s, ship-or-not
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
</details>
|
|
87
|
+
|
|
81
88
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
82
89
|
|
|
83
90
|
## Quick Start
|
|
@@ -157,7 +164,7 @@ The full feature reference lives in [`docs/`](docs/). Start here:
|
|
|
157
164
|
| [Performance & quantization](docs/performance-and-quantization.md) | QAT, FP8, Quant Menu (I + II), KV-cache, NVFP4, save formats, Cut Cross-Entropy, gradient checkpointing, kernels, activation offloading, multi-GPU / DeepSpeed / FSDP |
|
|
158
165
|
| [Data engineering](docs/data.md) | Formats, the Axolotl/LF-parity pipeline, data tools, synthetic generation & forge, quality scorecards, trace tooling, remote datasets, mixing, recipe DAGs |
|
|
159
166
|
| [Evaluation & probes](docs/evaluation.md) | Eval design/gate, eval-gated training, benchmarks, NLG metrics, calibration, Elo arena, diagnose, post-train X-ray probes, A/B, drift, tunability, `soup advise` |
|
|
160
|
-
| [Serving & export](docs/serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding, deploy autopilot, Web UI, Agent Forge |
|
|
167
|
+
| [Serving & export](docs/serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding (train + measure your own draft), deploy autopilot, Web UI, Agent Forge |
|
|
161
168
|
| [Adapters, registry & governance](docs/adapters-and-governance.md) | Adapter lifecycle/management, model registry, Soup Cans, the data flywheel (`soup loop`), knowledge editing, steering, supply-chain controls (scan/sign/BOM/attest/audit/airgap) |
|
|
162
169
|
| [Backends, platform & ops](docs/backends-and-ops.md) | MLX/Unsloth backends, alternative hubs, HF Hub integration, autopilot, experiment tracking, plan/apply, env lockfiles, hardware-fit, completions, plugins, utility commands |
|
|
163
170
|
| [Command reference](docs/commands.md) | The full `soup` command list |
|
|
@@ -12,7 +12,7 @@ feature reference — every `soup` capability, grouped by area.
|
|
|
12
12
|
| [Performance & quantization](performance-and-quantization.md) | QAT, FP8, Quant Menu (I + II), KV-cache, NVFP4, save formats, Cut Cross-Entropy, gradient checkpointing, kernels, activation offloading, multi-GPU / DeepSpeed / FSDP |
|
|
13
13
|
| [Data engineering](data.md) | Formats, the Axolotl/LF-parity pipeline, data tools, synthetic generation & forge, quality scorecards, trace tooling, remote datasets, mixing, recipe DAGs |
|
|
14
14
|
| [Evaluation & probes](evaluation.md) | Eval design/gate, eval-gated training, benchmarks, NLG metrics, calibration, Elo arena, diagnose, `soup ship` verdict, post-train X-ray probes, A/B, drift, tunability, `soup advise` |
|
|
15
|
-
| [Serving & export](serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding, deploy autopilot, Web UI, Agent Forge |
|
|
15
|
+
| [Serving & export](serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding (train + measure your own draft), deploy autopilot, Web UI, Agent Forge |
|
|
16
16
|
| [Adapters, registry & governance](adapters-and-governance.md) | Adapter lifecycle/management, model registry, Soup Cans, the data flywheel (`soup loop`), knowledge editing, steering, supply-chain controls |
|
|
17
17
|
| [Backends, platform & ops](backends-and-ops.md) | MLX/Unsloth backends, Modal cloud GPU training, alternative hubs, HF Hub integration, autopilot, experiment tracking, plan/apply, env lockfiles, hardware-fit, completions, plugins, utility commands |
|
|
18
18
|
| [Command reference](commands.md) | The full `soup` command list |
|
|
@@ -270,6 +270,12 @@ soup adapters merge ./run-v17 ./run-v18 ./run-v19 -o ./merged --strategy ties \
|
|
|
270
270
|
soup adapters merge ./run-v17 ./run-v18 -o ./merged --strategy dare \
|
|
271
271
|
--density 0.5 --seed 42
|
|
272
272
|
|
|
273
|
+
# Task-vector arithmetic (v0.71.34) — add / scale / NEGATE trained behaviours
|
|
274
|
+
# into one adapter (arXiv:2212.04089). Names map to dirs via --adapter name=path.
|
|
275
|
+
soup adapters arithmetic "coder + 0.5*math - toxic" \
|
|
276
|
+
--adapter coder=./coder-lora --adapter math=./math-lora \
|
|
277
|
+
--adapter toxic=./toxic-lora -o ./blended
|
|
278
|
+
|
|
273
279
|
# Leave-one-out ablation plan against a 4-hour wall-clock budget
|
|
274
280
|
soup adapters blame ./run-v18 --dataset train.jsonl --layer q_proj.7 \
|
|
275
281
|
--budget 4h --shards 10 --plan-only
|
|
@@ -314,6 +320,8 @@ soup adapters branches
|
|
|
314
320
|
|
|
315
321
|
**v0.71.4:** the merge verdict is now LIVE — `soup adapters merge … --canary suite.json` lifts the `MergeReport.verdict` `UNKNOWN` stub. A pre-scored `{"baseline_scores","candidate_scores"}` suite classifies the blend OK / MINOR / MAJOR with no model load; a `{"tasks":[...]}` suite uses an injectable scorer. `--strict-verdict` exits 2 on MAJOR. The backdoor-scan and license-conflict gates now run for **every** strategy, including `cmaes`. `soup adapters branch <name> --from-registry <id>` / `--attach-to-registry <id>` link training-env snapshots into the Registry lineage DAG (shown as a `branches` node in `soup history`).
|
|
316
322
|
|
|
323
|
+
**v0.71.34 — task-vector arithmetic.** `soup adapters arithmetic "<expr>"` applies task arithmetic (arXiv:2212.04089) to LoRA deltas: **add** (blend two skills), **scale** (`2*coder`), and — the differentiator — **negate** (`- toxic` removes a behaviour). Names in the expression map to adapter dirs via repeatable `--adapter name=path`. The math is done at the effective-delta level: a LoRA contributes `ΔW = B·A`, so the coefficient is applied so that `ΔW` scales **linearly** (subtracting an adapter actually negates its delta — a naïve element-wise sum would scale by `c²`, making negation a no-op). Adapters must share the base model (`--allow-cross-base` to override) and rank (mixed ranks are refused, not silently approximated). Each input passes the v0.71.2 backdoor-scan gate (`--allow-unscanned` to skip). Output is a single loadable adapter; exit 0 = ok, 1 = refusal.
|
|
324
|
+
|
|
317
325
|
|
|
318
326
|
## Soup Cans (Shareable Recipes)
|
|
319
327
|
|
|
@@ -27,6 +27,7 @@ soup merge --adapter ./output Merge LoRA with base model
|
|
|
27
27
|
soup merge-sharded-fsdp-weights ./shards -o merged.safetensors Consolidate FSDP shards into one safetensors (v0.71.14; --plan-only previews)
|
|
28
28
|
soup delinearize-llama4 ./src --target ./out [--num-experts N] [--plan-only] Live Llama-4 fused-expert reshape [E*din,dout] -> [E,din,dout] + sidecar copy (v0.71.21)
|
|
29
29
|
soup spectrum scan --model <id|path> --top-percent 50 [--modules mlp,attn] [-o patch.yaml] Spectrum SNR scan (no model load) -> training.unfrozen_parameters YAML patch (v0.71.23)
|
|
30
|
+
soup train --config sft.yaml # training.lisa_enabled: true [lisa_num_layers lisa_interval_steps] LISA layerwise importance sampling — full-FT quality at LoRA-like memory (sft/transformers/text/quantization=none) (v0.71.34)
|
|
30
31
|
soup export --model ./output --format gguf Export to GGUF (Ollama)
|
|
31
32
|
soup export --model ./output --deploy ollama Export GGUF + auto-deploy to Ollama
|
|
32
33
|
soup export --model ./output --format onnx Export to ONNX
|
|
@@ -134,7 +135,7 @@ soup migrate --from llamafactory config.yaml Import config from LLaMA-Factory
|
|
|
134
135
|
soup migrate --from axolotl config.yml Import config from Axolotl
|
|
135
136
|
soup migrate --from unsloth notebook.ipynb Import config from Unsloth notebook
|
|
136
137
|
soup migrate --from llamafactory c.yaml --dry-run Preview without writing
|
|
137
|
-
soup recipes list List all
|
|
138
|
+
soup recipes list List all 142 ready-made recipes
|
|
138
139
|
soup recipes show llama3.1-8b-sft Print recipe YAML
|
|
139
140
|
soup recipes use llama3.1-8b-sft Copy recipe to soup.yaml
|
|
140
141
|
soup recipes search "reasoning" Search by keyword/task/size
|
|
@@ -163,6 +164,11 @@ soup mcp serve --allow-mutating Also expose plan-only train_start
|
|
|
163
164
|
soup shrink --model <id|path> --drop-ratio 0.25 --calib c.jsonl -o shrunk Depth-prune least-important layer block + SHIP/DON'T-SHIP ppl verdict (exit 0/2/1) (v0.71.29)
|
|
164
165
|
soup shrink ... --drop-layers N --heal h.jsonl --heal-steps 200 --device cpu Drop N layers + distill-heal (fuse LoRA back to one dense model)
|
|
165
166
|
soup shrink ... --tolerance 0.10 --plan-only [--attach-to-registry <id>] Ppl-regression tolerance / print importance table only / registry attach
|
|
167
|
+
soup draft measure --target <m> --draft <d> --prompts p.jsonl Draft acceptance rate + real plain-vs-assisted tok/s (exit 0/2/1) (v0.71.33)
|
|
168
|
+
soup draft measure ... --min-acceptance 0.6 -o report.json Exit 2 below the floor (CI gate) / write the JSON report
|
|
169
|
+
soup draft distill --target <tuned> --draft-base <tiny> --data d.jsonl -o draft/ Distil a DENSE speculative-decoding draft + register it (v0.71.33)
|
|
170
|
+
soup draft distill ... --steps N --device cpu --force --plan-only Training budget / device / overwrite -o / render the config only
|
|
171
|
+
soup draft list List local drafts that `soup serve --auto-spec` will pick up (v0.71.33)
|
|
166
172
|
soup tui Full-screen Textual dashboard (requires [tui] extra)
|
|
167
173
|
soup train --config soup.yaml --profile Record torch.profiler trace to <output>/profiles/
|
|
168
174
|
soup --log-level quiet|normal|verbose|debug Global logging tier (Rich-formatted)
|
|
@@ -179,6 +185,7 @@ soup adapters sign <adapter> [--backend unsigned|ed25519] [--key <pem>|--generat
|
|
|
179
185
|
soup adapters verify <adapter> [--strict] [--public-key <pem>] Verify manifest + ed25519 signature
|
|
180
186
|
soup adapters check-safetensors <adapter> [--strict] Refuse pickle / PyTorch-classic weights
|
|
181
187
|
soup adapters merge ... [--license <id>] [--license-override <reason>] [--allow-unscanned] License + backdoor-scan gates (auto-detect license; scan FAIL refused)
|
|
188
|
+
soup adapters arithmetic "coder + 0.5*math - toxic" --adapter coder=<p> --adapter math=<p> --adapter toxic=<p> -o <out> [--allow-unscanned --allow-cross-base] Task-vector algebra over LoRA adapters (add/scale/negate; same-rank; scan + same-base gated) (v0.71.34)
|
|
182
189
|
soup attest emit ... [--sign ed25519 --key <pem>] [-o att.json] in-toto/SLSA-3 attestation (+ .sig sidecar)
|
|
183
190
|
soup attest verify <statement> --signature <sig> [--public-key <pem>] Verify ed25519 attestation signature
|
|
184
191
|
soup airgap-bundle --model <m> --output <out.tar> [--repro-receipt <r.json>] Signed tarball for data-diode transfer (embeds repro-receipt)
|
|
@@ -380,6 +380,25 @@ training:
|
|
|
380
380
|
|
|
381
381
|
Works with and without LoRA. When used with LoRA, LoRA is applied only to unfrozen layers.
|
|
382
382
|
|
|
383
|
+
## LISA — Layerwise Importance Sampling (v0.71.34)
|
|
384
|
+
|
|
385
|
+
LISA (Layerwise Importance Sampled AdamW, [arXiv:2403.17919](https://arxiv.org/abs/2403.17919)) targets full-fine-tuning quality at LoRA-like memory. Instead of picking layers once (that's Spectrum's static `unfrozen_parameters`), LISA re-samples a small random set of decoder layers **every N steps** and freezes the rest; the input embeddings, the LM head, and the final norm stay trainable throughout.
|
|
386
|
+
|
|
387
|
+
```yaml
|
|
388
|
+
task: sft
|
|
389
|
+
backend: transformers
|
|
390
|
+
modality: text
|
|
391
|
+
training:
|
|
392
|
+
quantization: none # LISA is full-FT of the active layers
|
|
393
|
+
lisa_enabled: true
|
|
394
|
+
lisa_num_layers: 2 # decoder layers active per interval (clamped to model depth)
|
|
395
|
+
lisa_interval_steps: 20 # re-sample cadence, in global steps
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
Because only a handful of layers train at any moment (and their optimizer state is cleared when they're re-frozen), peak optimizer memory is roughly `embeddings + head + lisa_num_layers` — far below a full fine-tune, while every layer still gets updated over the course of training. LISA is `sft` + `transformers` + `text` + `quantization: none` only, and is mutually exclusive with LoRA features, `freeze_layers`/`freeze_ratio`, and Spectrum's `unfrozen_parameters` (each independently decides what trains).
|
|
399
|
+
|
|
400
|
+
Implementation note: the model is left fully trainable at trainer-setup time so HF's optimizer (built before the first callback fires) contains every decoder parameter; the LISA callback then toggles `requires_grad` per interval — frozen parameters produce no gradient and the optimizer skips them.
|
|
401
|
+
|
|
383
402
|
|
|
384
403
|
## Loss Watchdog
|
|
385
404
|
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
- [Anthropic Messages API Converter](#anthropic-messages-api-converter)
|
|
24
24
|
- [Server-Side Tools](#server-side-tools)
|
|
25
25
|
- [Anthropic Messages Endpoint](#anthropic-messages-endpoint)
|
|
26
|
+
- [Train + measure your own draft (`soup draft`)](#train--measure-your-own-draft-soup-draft)
|
|
26
27
|
- [N-gram Speculative Decoding](#n-gram-speculative-decoding)
|
|
27
28
|
- [Server-Side Tool Endpoints](#server-side-tool-endpoints)
|
|
28
29
|
|
|
@@ -254,7 +255,10 @@ soup serve --model ./output --backend sglang --tensor-parallel 2
|
|
|
254
255
|
|
|
255
256
|
### Speculative Decoding
|
|
256
257
|
|
|
257
|
-
Use a smaller draft model to speed up generation
|
|
258
|
+
Use a smaller draft model to speed up generation. **Measure before you trust it** — see
|
|
259
|
+
[Train + measure your own draft](#train--measure-your-own-draft-soup-draft) below. Speculative
|
|
260
|
+
decoding is only a win when the draft agrees with the target often enough to pay for its own
|
|
261
|
+
forward pass; on a small target it is frequently a *slowdown*.
|
|
258
262
|
|
|
259
263
|
```bash
|
|
260
264
|
# Transformers backend — uses HF assisted generation
|
|
@@ -268,7 +272,46 @@ soup serve --model meta-llama/Llama-3.1-70B-Instruct --backend vllm --auto-spec
|
|
|
268
272
|
# → auto-paired: meta-llama/Llama-3.2-1B-Instruct (target: Llama-3.1-70B-Instruct)
|
|
269
273
|
```
|
|
270
274
|
|
|
271
|
-
`--auto-spec` handles Llama 3.1/3.3/4, Qwen 2.5/3, Mistral Large, Mixtral, DeepSeek V3/R1, and Gemma 2/3. Models without a known draft pairing (e.g. 8B-or-smaller targets where draft+target overhead outweighs the gain) print a yellow "no draft" note and fall back to standard decoding.
|
|
275
|
+
`--auto-spec` handles Llama 3.1/3.3/4, Qwen 2.5/3, Mistral Large, Mixtral, DeepSeek V3/R1, and Gemma 2/3. Models without a known draft pairing (e.g. 8B-or-smaller targets where draft+target overhead outweighs the gain) print a yellow "no draft" note and fall back to standard decoding. A draft you trained yourself with `soup draft distill` is picked up **before** this built-in table.
|
|
276
|
+
|
|
277
|
+
### Train + measure your own draft (`soup draft`)
|
|
278
|
+
|
|
279
|
+
The question nobody answers before enabling speculative decoding: *would the draft actually
|
|
280
|
+
propose the tokens my model is going to emit?* `soup draft measure` answers it.
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
# Would this draft pay off? Acceptance rate + REAL plain-vs-assisted throughput.
|
|
284
|
+
soup draft measure --target ./my-tuned-model \
|
|
285
|
+
--draft HuggingFaceTB/SmolLM2-135M-Instruct \
|
|
286
|
+
--prompts prod-prompts.jsonl
|
|
287
|
+
|
|
288
|
+
# Distil a draft from your own target, then serve it automatically.
|
|
289
|
+
soup draft distill --target ./my-tuned-model \
|
|
290
|
+
--draft-base HuggingFaceTB/SmolLM2-135M-Instruct \
|
|
291
|
+
--data traffic.jsonl -o draft/
|
|
292
|
+
soup serve --model ./my-tuned-model --auto-spec # picks up ./draft
|
|
293
|
+
soup draft list
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
**Acceptance rate** is the fraction of the target's own greedy tokens the draft would have
|
|
297
|
+
proposed correctly (teacher-forced argmax agreement — the metric the Medusa/EAGLE papers report).
|
|
298
|
+
Higher is better; roughly, ≥70% is where speculative decoding starts paying for the draft's
|
|
299
|
+
forward pass on realistic hardware. `--min-acceptance 0.6` exits **2** below the floor, so CI can
|
|
300
|
+
gate on it (exit 0 = ok, 2 = below floor, 1 = error).
|
|
301
|
+
|
|
302
|
+
`distill` runs logit KD through the existing `task: distill` trainer and emits a **dense** model
|
|
303
|
+
(a PEFT adapter directory cannot be loaded as an `assistant_model`). Draft and target must share a
|
|
304
|
+
tokenizer — a mismatch is refused up front, because speculative decoding proposes *draft* token ids
|
|
305
|
+
into the *target's* vocabulary and a mismatched pair silently produces garbage instead of failing.
|
|
306
|
+
A `soup shrink` output makes a good draft base: same tokenizer by construction.
|
|
307
|
+
|
|
308
|
+
**Measured reality check (be sceptical of speedup claims, including ours).** On
|
|
309
|
+
`SmolLM2-360M-Instruct` with a `SmolLM2-135M-Instruct` draft, the *stock* draft already scored
|
|
310
|
+
**69.3%** acceptance, distilling it changed nothing (69.7% after 2 epochs, 69.3% after 10), and
|
|
311
|
+
assisted decoding came out **0.55–0.64×** — a net slowdown. A small same-family draft is already
|
|
312
|
+
near its ceiling for agreeing with the target, and the draft's forward pass costs more than the
|
|
313
|
+
tokens it saves. Whether distillation pays off on a larger or genuinely diverged target/draft pair
|
|
314
|
+
is unproven on a 4 GB box. Run `soup draft measure` on *your* pair rather than assuming.
|
|
272
315
|
|
|
273
316
|
### Prefix Caching
|
|
274
317
|
|
|
@@ -418,7 +461,7 @@ soup ui
|
|
|
418
461
|
|
|
419
462
|
**Pages:**
|
|
420
463
|
- **Dashboard** — view all experiment runs, loss charts, system info, multi-run comparison
|
|
421
|
-
- **New Training** — create configs from templates or
|
|
464
|
+
- **New Training** — create configs from templates or 142 ready-made recipes, validate, start training with live SSE log streaming and progress bar
|
|
422
465
|
- **Data Explorer** — browse and inspect datasets (JSONL, JSON, CSV, Parquet)
|
|
423
466
|
- **Model Chat** — chat with streaming responses, configurable temperature/top_p/max_tokens, system prompt, adapter selection, markdown rendering, chat export
|
|
424
467
|
|
|
@@ -427,7 +470,7 @@ soup ui
|
|
|
427
470
|
- **Enhanced Metrics** — 2x2 chart grid (loss, LR, grad_norm, throughput) + GPU memory chart, eval results table
|
|
428
471
|
- **Multi-Run Compare** — overlay loss curves from up to 5 runs side-by-side
|
|
429
472
|
- **Chat Upgrade** — SSE streaming via proxy, typing indicator, cancel button, markdown renderer (bold, italic, code blocks), chat export as JSON
|
|
430
|
-
- **Config Builder** — recipe dropdown (
|
|
473
|
+
- **Config Builder** — recipe dropdown (142 recipes), config schema API for dynamic form generation
|
|
431
474
|
|
|
432
475
|
**Security:** The Web UI generates a random auth token at startup (printed to console). All mutating endpoints (start/stop training, delete runs, inspect data, validate config) require `Authorization: Bearer <token>` header. CORS is restricted to the served origin. Data inspection is sandboxed to the working directory.
|
|
433
476
|
|
|
@@ -538,6 +538,18 @@ app.command(
|
|
|
538
538
|
),
|
|
539
539
|
)(_shrink_cmd.shrink)
|
|
540
540
|
|
|
541
|
+
# v0.71.33 — `soup draft` train-your-own speculative-decoding draft.
|
|
542
|
+
from soup_cli.commands import draft as _draft_cmd # noqa: E402
|
|
543
|
+
|
|
544
|
+
app.add_typer(
|
|
545
|
+
_draft_cmd.app,
|
|
546
|
+
name="draft",
|
|
547
|
+
help=(
|
|
548
|
+
"Train + measure a speculative-decoding draft model: distil your tuned "
|
|
549
|
+
"model into a tiny draft, then serve it with --auto-spec (v0.71.33)."
|
|
550
|
+
),
|
|
551
|
+
)
|
|
552
|
+
|
|
541
553
|
|
|
542
554
|
def _rewrite_advise_argv(argv: list) -> list:
|
|
543
555
|
"""Inject `run` between `advise` and a non-subcommand first argument.
|