soup-cli 0.71.26__tar.gz → 0.71.27__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.26 → soup_cli-0.71.27}/CHANGELOG.md +76 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/CONTRIBUTING.md +3 -3
- {soup_cli-0.71.26 → soup_cli-0.71.27}/CONTRIBUTORS.md +4 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/PKG-INFO +18 -14
- {soup_cli-0.71.26 → soup_cli-0.71.27}/README.md +17 -13
- {soup_cli-0.71.26 → soup_cli-0.71.27}/docs/commands.md +5 -1
- {soup_cli-0.71.26 → soup_cli-0.71.27}/docs/data.md +46 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/pyproject.toml +1 -1
- soup_cli-0.71.27/src/soup_cli/__init__.py +3 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/cans/schema.py +4 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/cli.py +7 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/cloud/modal.py +6 -1
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/_eval_v0550.py +31 -2
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/bench.py +5 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/data.py +18 -12
- soup_cli-0.71.27/src/soup_cli/commands/data_doctor.py +337 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/diagnose.py +21 -6
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/eval.py +31 -1
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/export.py +8 -8
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/fetch.py +4 -1
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/generate.py +20 -5
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/serve.py +38 -7
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/train.py +177 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/formats.py +43 -9
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/loader.py +6 -3
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/traces/parsers.py +4 -1
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/eval/checkpoint_intelligence.py +6 -4
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/eval/custom.py +4 -1
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/eval/gate.py +41 -29
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/migrate/common.py +8 -8
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/monitoring/callback.py +87 -3
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/registry/store.py +39 -8
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/bco.py +1 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/classifier.py +1 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/distill.py +36 -13
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/dpo.py +1 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/embedding.py +1 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/grpo.py +4 -1
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/ipo.py +5 -1
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/kto.py +1 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/orpo.py +1 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/ppo.py +32 -12
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/pretrain.py +1 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/reward_model.py +1 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/sft.py +44 -3
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/simpo.py +1 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/ui/app.py +12 -7
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/active_sampler.py +7 -3
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/block_expansion.py +15 -4
- soup_cli-0.71.27/src/soup_cli/utils/data_doctor.py +927 -0
- soup_cli-0.71.27/src/soup_cli/utils/data_lint.py +484 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/data_pipeline.py +47 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/deploy_measure.py +26 -1
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/edit_kernels.py +4 -1
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/eval_gate_hook.py +2 -1
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/gguf_quant.py +9 -4
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/license_matrix.py +5 -1
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/loop_stages.py +6 -1
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/mod.py +140 -16
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/namespace_pin.py +24 -8
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/ollama.py +6 -6
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/preference_combine.py +56 -5
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/registry.py +4 -2
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/reward_hack_control.py +13 -6
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/rl_checkpoint.py +41 -1
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/sglang.py +5 -2
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/terraform_plan.py +17 -2
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/webhooks.py +23 -7
- soup_cli-0.71.27/tests/test_code_review_critical.py +334 -0
- soup_cli-0.71.27/tests/test_code_review_deferred.py +177 -0
- soup_cli-0.71.27/tests/test_code_review_high.py +413 -0
- soup_cli-0.71.27/tests/test_code_review_medium_low.py +97 -0
- soup_cli-0.71.27/tests/test_code_review_recurring.py +110 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_eval_gate.py +12 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_part_a_wave1.py +7 -0
- soup_cli-0.71.27/tests/test_trainer_init.py +469 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0560.py +8 -3
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v07126.py +7 -2
- soup_cli-0.71.27/tests/test_v07127.py +2190 -0
- soup_cli-0.71.26/src/soup_cli/__init__.py +0 -3
- soup_cli-0.71.26/tests/test_trainer_init.py +0 -160
- {soup_cli-0.71.26 → soup_cli-0.71.27}/.dockerignore +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/.github/FUNDING.yml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/.github/pull_request_template.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/.gitignore +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/.mailmap +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/AGENTS.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/CODEOWNERS +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/Dockerfile +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/LICENSE +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/NOTICE +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/SECURITY.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/docker-compose.yml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/docs/README.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/docs/adapters-and-governance.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/docs/backends-and-ops.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/docs/evaluation.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/docs/models.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/docs/peft-and-efficiency.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/docs/performance-and-quantization.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/docs/serving-and-export.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/docs/training.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/examples/README.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/examples/reward_hacking/rewards.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/soup.png +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/soup_logo_svg.svg +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/cloud/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/_eval_v0650.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/_eval_v07110.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/adapters.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/advise.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/ra_dit.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/ship.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/spectrum.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/config/schema.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/recipes/catalog.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/bitnet.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/mole_routing.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/raft.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/tts.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/advise.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/agent_sandbox.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/diagnose/citation.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/diagnose/live.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/harm_probe.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/hubs.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/interference_live.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/live_eval.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/peft_wiring.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/probe_kernel.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/ra_dit_run.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/raft.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/ship_verdict.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/spectrum_scan.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/truth_probe.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/tts_codec.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/unlearn_kernels.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/templates/chat.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/templates/code.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/templates/medical.yaml +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/__init__.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/conftest.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/qa/v07114_qa.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_adapters.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_audio.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_autopilot.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_bco.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_bench.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_build_dag.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_callback.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_cans.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_chat.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_chat_template.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_cli.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_config.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_cost.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_curriculum.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_data.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_data_augment.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_data_sample.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_data_split.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_data_tools.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_diff.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_display.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_doctor.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_embedding.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_errors.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_eval.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_export.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_formats.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_generate.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_gpu.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_grpo.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_infer.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_init.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_ipo.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_kto.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_loader.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_log_level.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_merge.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_migrate.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_moe.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_orpo.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_packing.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_part_d.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_part_e.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_performance.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_ppo.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_pretrain.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_profile.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_profiling.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_progress.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_push.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_qat.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_quant_check.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_quickstart.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_recipes.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_registry.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_relora.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_replay.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_resume.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_rlvr.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_run_cost.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_runs.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_serve.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_server_generate.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_simpo.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_sweep.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_tracker.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_training_speed.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_tui.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_ui.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_unsloth.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0420.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0450.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0490.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0510.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0520.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0530.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v05310.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v05311.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0532.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0533.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0534.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0535.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0536.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0537.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0538.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0539.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0540.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0550.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0580.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0590.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v07110.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v07111.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v07112.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v07113.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v07114.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v07115.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v07116.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v07117.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v07118.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v07119.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0712.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v07120.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v07121.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v07122.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v07123.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v07124.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v07125.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0713.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0714.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0715.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0716.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0717.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0718.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_v0719.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_validator.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_vision.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_warmup.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_why.py +0 -0
- {soup_cli-0.71.26 → soup_cli-0.71.27}/tests/test_windows_encoding.py +0 -0
|
@@ -12,6 +12,82 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.71.27] - 2026-07-03
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- **Fine-tune Doctor** — kill the top *silent* fine-tune failures before a
|
|
19
|
+
single training step; no competitor (Unsloth/Axolotl/LlamaFactory) ships
|
|
20
|
+
any of these three:
|
|
21
|
+
- `soup data doctor <data> --model <id|path>` — chat-template
|
|
22
|
+
compatibility report over 8 checks: `chat_template` present,
|
|
23
|
+
`template_render`s cleanly, has `{% generation %}` markers,
|
|
24
|
+
`eos_in_labels` (the **#1 "model never stops generating" bug** — every
|
|
25
|
+
assistant turn's trained span must actually contain an EOS/EOT token;
|
|
26
|
+
checks every turn, not just the last), `bos_duplication` (template +
|
|
27
|
+
tokenizer both prepending BOS), `system_role` support (Mistral-style
|
|
28
|
+
templates reject a leading system turn), `unknown_roles`, and
|
|
29
|
+
`truncation_risk` (p95 rendered length vs `max_length`). Same OK / MINOR
|
|
30
|
+
/ MAJOR taxonomy as `soup diagnose`; exit 0 = OK/MINOR, exit 2 = MAJOR.
|
|
31
|
+
`--train-on-responses-only` / `--train-on-messages-with-train-field`
|
|
32
|
+
select the same masking strategy `soup train` would use, so the report
|
|
33
|
+
and `--show-mask` never disagree about what's actually trained.
|
|
34
|
+
- `soup data doctor ... --show-mask N` — render N sample rows with
|
|
35
|
+
per-token trained/masked colouring through the REAL collator path
|
|
36
|
+
(answer-only / per-message-train-field / RAFT span-mask) — not a
|
|
37
|
+
reimplementation — so an assistant-mask bug is visible instantly.
|
|
38
|
+
- `soup data lint <data>` — preference-data linter for
|
|
39
|
+
dpo/orpo/simpo/ipo/bco/kto: `length_bias` (chosen systematically longer
|
|
40
|
+
than rejected — the **#1 silent DPO degradation**, reported as a
|
|
41
|
+
Cohen's d effect size), `label_imbalance` (KTO desirable:undesirable
|
|
42
|
+
ratio), `near_duplicates` (MinHash/LSH, reuses the `soup data dedup`
|
|
43
|
+
kernel), `identical_pairs` (chosen == rejected — zero preference
|
|
44
|
+
signal), and `prompt_leak` (the prompt echoed verbatim inside the
|
|
45
|
+
completion — a common synthetic-data pipeline bug). Optional `--model`
|
|
46
|
+
for exact token-length bias (default: word count).
|
|
47
|
+
- Validated live against the real `HuggingFaceTB/SmolLM2-135M-Instruct`
|
|
48
|
+
tokenizer on Windows + RTX 3050 — this smoke pass found and fixed two
|
|
49
|
+
genuine bugs beyond what synthetic fixtures alone caught: an EOS check
|
|
50
|
+
that required the EOS token to be the *literal last* trained token
|
|
51
|
+
(real templates often have a trailing formatting token after the
|
|
52
|
+
closing tag that stays inside the trained span), and two call sites
|
|
53
|
+
that only caught `(ValueError, TypeError)` around a tokenizer's
|
|
54
|
+
`apply_chat_template` when a real Jinja `raise_exception()`
|
|
55
|
+
(Mistral-style no-system-role guard) raises
|
|
56
|
+
`jinja2.exceptions.TemplateError`.
|
|
57
|
+
|
|
58
|
+
### Fixed
|
|
59
|
+
- Harden `commands/diagnose.py`'s `--evidence` loader against a TOCTOU
|
|
60
|
+
symlink swap: opens with `O_NOFOLLOW` and size-checks the open fd via
|
|
61
|
+
`os.fstat` instead of `os.path.getsize` on the path before the open —
|
|
62
|
+
backports the hardened loader shipped for `soup ship` in v0.71.25 (closes
|
|
63
|
+
v0.71.25 known-limitation (4)).
|
|
64
|
+
- Harden judge-model URL validation against a hostname prefix bypass
|
|
65
|
+
(`http://localhost.attacker.com`) — `GateTask._valid_judge_url` /
|
|
66
|
+
`_parse_judge_url` now use `urllib.parse.urlparse` + hostname checks instead
|
|
67
|
+
of `startswith`. Closes #283
|
|
68
|
+
([#288](https://github.com/MakazhanAlpamys/Soup/pull/288) by [@CODING-DARSH](https://github.com/CODING-DARSH)).
|
|
69
|
+
- `SFTTrainerWrapper` now applies configured vocabulary expansion
|
|
70
|
+
(`data.add_new_tokens` / `data.new_special_tokens`) and resizes the model
|
|
71
|
+
embeddings during initialization — previously these fields were accepted by
|
|
72
|
+
the schema but silently ignored. Closes #289
|
|
73
|
+
([#287](https://github.com/MakazhanAlpamys/Soup/pull/287) by [@CODING-DARSH](https://github.com/CODING-DARSH)).
|
|
74
|
+
- Vision and audio SFT paths now apply that same configured vocabulary
|
|
75
|
+
expansion (`data.add_new_tokens` / `data.new_special_tokens`) via the shared
|
|
76
|
+
`apply_vocab_expansion()` helper, consistent with the text SFT path — they
|
|
77
|
+
previously ignored it. Closes #290
|
|
78
|
+
([#291](https://github.com/MakazhanAlpamys/Soup/pull/291) by [@CODING-DARSH](https://github.com/CODING-DARSH)).
|
|
79
|
+
|
|
80
|
+
### Security
|
|
81
|
+
- `soup data doctor` strips C0 control characters (keeping tab/newline/CR)
|
|
82
|
+
from dataset-derived content before it reaches the terminal — Rich's
|
|
83
|
+
`markup.escape()` only neutralises `[...]` tag syntax, not raw escape
|
|
84
|
+
sequences, so an untrusted training row (e.g. an unknown `role` field, or
|
|
85
|
+
`--show-mask`'s decoded token text on a byte-level BPE tokenizer) could
|
|
86
|
+
otherwise carry a literal ESC byte through to the terminal (title-bar /
|
|
87
|
+
OSC-8 link spoofing, or obscuring a MAJOR verdict via cursor tricks).
|
|
88
|
+
`--output` JSON is unaffected (`json.dumps` already escapes control
|
|
89
|
+
characters).
|
|
90
|
+
|
|
15
91
|
## [0.71.26] - 2026-07-01
|
|
16
92
|
|
|
17
93
|
### Added
|
|
@@ -116,11 +116,11 @@ src/soup_cli/
|
|
|
116
116
|
cans/ - Shareable .can artifact format + run/publish orchestrator (v0.26.0 + v0.33.0)
|
|
117
117
|
data/traces/ - Trace-to-Preference harvester (v0.26.0)
|
|
118
118
|
data/collators.py - CrossDocCollator for sample packing (v0.33.0)
|
|
119
|
-
utils/ - GPU, errors, MoE, GaLore, QAT, Unsloth, vLLM, SGLang, Liger, FlashAttn, FSDP, Ring Attention, long-context, quality, curriculum, freeze, dataset-registry, mlx, peft_builder, paths, topology, launcher, mii, pipeline, cut_ce, fp8, gradient_ckpt, kernel_picker, cross_doc_attn, activation_offload, hf, spec_pairing, structured_output, metrics, tracing, auto_quant, lr_finder, grad_accum, mixed_precision, warmup, spike_recovery, convergence, v028_features, multipack_sampler, multipack, neat_packing, jinja_analyzer, quant_menu, relora, peft_patches, peft_wiring, dpo_variants, optimizer_zoo, lr_groups, loftq_init, block_expansion, tts, classifier, distill, bitnet, ebft_gdpo, moe_quant, reasoning_effort, gguf_quant, kv_cache, advanced_precision, save_formats, deploy_measure, advise, advise_history, adapter_diff, adapter_merge, blame, adapter_branch, unlearning, unlearning_eval, knowledge_edit, edit_governor, edit_diff, ra_dit, steering, citation_faithful, grace_codebook, ingest_sources, prune_prompt, active_sampler, ab_test, drift_alarm, tunability, terraform_plan, env_lock, hardware_fit, completions, license_advisor, behavior_battery, capability_suite, checklist_dsl, irt, sae_diff, sleeper_probe, interference, probe_pack, cmaes_merge, vector_bank, mole_routing, adapter_pr, soup_lock, adapter_bisect, prompt_compile, prompt_distill, compile_tools, apple_adapter, local_rl, build_dag, expectations, magpie, persona_hub, brain_rot, reward_hacking, uld, minillm, rl_checkpoint, iterative_dpo, echo_trap, mod, local_rl_scheduler, spectrum_scan, ship_verdict
|
|
119
|
+
utils/ - GPU, errors, MoE, GaLore, QAT, Unsloth, vLLM, SGLang, Liger, FlashAttn, FSDP, Ring Attention, long-context, quality, curriculum, freeze, dataset-registry, mlx, peft_builder, paths, topology, launcher, mii, pipeline, cut_ce, fp8, gradient_ckpt, kernel_picker, cross_doc_attn, activation_offload, hf, spec_pairing, structured_output, metrics, tracing, auto_quant, lr_finder, grad_accum, mixed_precision, warmup, spike_recovery, convergence, v028_features, multipack_sampler, multipack, neat_packing, jinja_analyzer, quant_menu, relora, peft_patches, peft_wiring, dpo_variants, optimizer_zoo, lr_groups, loftq_init, block_expansion, tts, classifier, distill, bitnet, ebft_gdpo, moe_quant, reasoning_effort, gguf_quant, kv_cache, advanced_precision, save_formats, deploy_measure, advise, advise_history, adapter_diff, adapter_merge, blame, adapter_branch, unlearning, unlearning_eval, knowledge_edit, edit_governor, edit_diff, ra_dit, steering, citation_faithful, grace_codebook, ingest_sources, prune_prompt, active_sampler, ab_test, drift_alarm, tunability, terraform_plan, env_lock, hardware_fit, completions, license_advisor, behavior_battery, capability_suite, checklist_dsl, irt, sae_diff, sleeper_probe, interference, probe_pack, cmaes_merge, vector_bank, mole_routing, adapter_pr, soup_lock, adapter_bisect, prompt_compile, prompt_distill, compile_tools, apple_adapter, local_rl, build_dag, expectations, magpie, persona_hub, brain_rot, reward_hacking, uld, minillm, rl_checkpoint, iterative_dpo, echo_trap, mod, local_rl_scheduler, spectrum_scan, ship_verdict, reward_hack_control, data_doctor, data_lint
|
|
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 (304 files, 15042 tests)
|
|
124
124
|
examples/ - Real-world config examples and datasets
|
|
125
125
|
```
|
|
126
126
|
|
|
@@ -150,7 +150,7 @@ pytest tests/test_data.py::test_detect_alpaca_format -v
|
|
|
150
150
|
pytest tests/ --cov=soup_cli --cov-report=html
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
-
### Test Files (
|
|
153
|
+
### Test Files (304 files)
|
|
154
154
|
|
|
155
155
|
> A representative sample of the suite below. The full table lives in
|
|
156
156
|
> [`.claude/CLAUDE.md`](.claude/CLAUDE.md); run `pytest tests/ -v` for the complete list.
|
|
@@ -44,6 +44,10 @@ Listed by first contribution. PR numbers link the work.
|
|
|
44
44
|
- Unit tests for the `warmup.py` auto-warmup-steps helper ([#274](https://github.com/MakazhanAlpamys/Soup/pull/274))
|
|
45
45
|
- **Kondamwar Akshaya Shrikant** ([@Akshaya-reddy18](https://github.com/Akshaya-reddy18))
|
|
46
46
|
- Friendlier error messages — richer CUDA-OOM hint + Hugging Face gated-repo and `trust_remote_code` mappings + tests ([#282](https://github.com/MakazhanAlpamys/Soup/pull/282))
|
|
47
|
+
- **Darsh** ([@CODING-DARSH](https://github.com/CODING-DARSH))
|
|
48
|
+
- Harden judge-URL validation against hostname prefix bypass (`startswith` → `urlparse`) in `eval/gate.py` ([#288](https://github.com/MakazhanAlpamys/Soup/pull/288))
|
|
49
|
+
- Apply configured vocabulary expansion (`data.add_new_tokens` / `new_special_tokens`) during SFT trainer init ([#287](https://github.com/MakazhanAlpamys/Soup/pull/287))
|
|
50
|
+
- Reuse the shared vocab-expansion helper in the vision + audio SFT paths ([#291](https://github.com/MakazhanAlpamys/Soup/pull/291))
|
|
47
51
|
|
|
48
52
|
---
|
|
49
53
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: soup-cli
|
|
3
|
-
Version: 0.71.
|
|
3
|
+
Version: 0.71.27
|
|
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
|
|
@@ -189,21 +189,25 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
189
189
|
|
|
190
190
|
## What's New
|
|
191
191
|
|
|
192
|
-
**v0.71.
|
|
193
|
-
|
|
194
|
-
- **
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
-
|
|
203
|
-
|
|
192
|
+
**v0.71.27 — Fine-tune Doctor: catch silent failures before they burn a training run.** `soup data doctor` and `soup data lint` — no competitor (Unsloth/Axolotl/LlamaFactory) ships either.
|
|
193
|
+
|
|
194
|
+
- **The #1 "model never stops generating" bug, caught pre-flight.** `soup data doctor` checks
|
|
195
|
+
whether every trained turn actually contains an EOS token — plus BOS duplication,
|
|
196
|
+
no-system-role templates, unknown roles, and truncation risk — before you burn GPU hours on
|
|
197
|
+
a broken chat template.
|
|
198
|
+
- **See exactly what's trained, token by token.** `--show-mask N` renders sample rows through
|
|
199
|
+
the REAL collator path (answer-only / RAFT / packing-aware), so an assistant-mask bug is
|
|
200
|
+
visible instantly instead of silently degrading the whole run.
|
|
201
|
+
- **Stop silently-worse DPO runs.** `soup data lint` flags length bias (the #1 silent
|
|
202
|
+
preference-tuning degradation, reported as an effect size), near-duplicate pairs,
|
|
203
|
+
chosen==rejected rows, and prompt leakage — across dpo/orpo/simpo/ipo/bco/kto data.
|
|
204
|
+
- **Found real bugs on a real tokenizer.** Live-validated against
|
|
205
|
+
`HuggingFaceTB/SmolLM2-135M-Instruct` on Windows + RTX 3050 — the smoke pass itself caught
|
|
206
|
+
two genuine template-handling bugs before release.
|
|
204
207
|
|
|
205
208
|
```bash
|
|
206
|
-
soup train --
|
|
209
|
+
soup data doctor train.jsonl --model meta-llama/Llama-3.1-8B-Instruct --show-mask 3
|
|
210
|
+
soup data lint prefs.jsonl --model meta-llama/Llama-3.1-8B-Instruct
|
|
207
211
|
```
|
|
208
212
|
|
|
209
213
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
@@ -49,21 +49,25 @@ 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
|
-
|
|
52
|
+
**v0.71.27 — Fine-tune Doctor: catch silent failures before they burn a training run.** `soup data doctor` and `soup data lint` — no competitor (Unsloth/Axolotl/LlamaFactory) ships either.
|
|
53
|
+
|
|
54
|
+
- **The #1 "model never stops generating" bug, caught pre-flight.** `soup data doctor` checks
|
|
55
|
+
whether every trained turn actually contains an EOS token — plus BOS duplication,
|
|
56
|
+
no-system-role templates, unknown roles, and truncation risk — before you burn GPU hours on
|
|
57
|
+
a broken chat template.
|
|
58
|
+
- **See exactly what's trained, token by token.** `--show-mask N` renders sample rows through
|
|
59
|
+
the REAL collator path (answer-only / RAFT / packing-aware), so an assistant-mask bug is
|
|
60
|
+
visible instantly instead of silently degrading the whole run.
|
|
61
|
+
- **Stop silently-worse DPO runs.** `soup data lint` flags length bias (the #1 silent
|
|
62
|
+
preference-tuning degradation, reported as an effect size), near-duplicate pairs,
|
|
63
|
+
chosen==rejected rows, and prompt leakage — across dpo/orpo/simpo/ipo/bco/kto data.
|
|
64
|
+
- **Found real bugs on a real tokenizer.** Live-validated against
|
|
65
|
+
`HuggingFaceTB/SmolLM2-135M-Instruct` on Windows + RTX 3050 — the smoke pass itself caught
|
|
66
|
+
two genuine template-handling bugs before release.
|
|
64
67
|
|
|
65
68
|
```bash
|
|
66
|
-
soup train --
|
|
69
|
+
soup data doctor train.jsonl --model meta-llama/Llama-3.1-8B-Instruct --show-mask 3
|
|
70
|
+
soup data lint prefs.jsonl --model meta-llama/Llama-3.1-8B-Instruct
|
|
67
71
|
```
|
|
68
72
|
|
|
69
73
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
@@ -68,6 +68,9 @@ soup sweep --config soup.yaml --param lr=... Hyperparameter search
|
|
|
68
68
|
soup diff --model-a ./a --model-b ./b Compare two models
|
|
69
69
|
soup data inspect <path> View dataset stats
|
|
70
70
|
soup data validate <path> Check format (auto-detect)
|
|
71
|
+
soup data doctor <path> --model <id> Chat-template compat report: 8 checks, OK/MINOR/MAJOR
|
|
72
|
+
soup data doctor <path> --model <id> --show-mask N Per-token trained/masked colouring via the real collator
|
|
73
|
+
soup data lint <path> Preference-data linter: length bias, near-dups, chosen==rejected
|
|
71
74
|
soup data convert <path> --to chatml Convert between formats
|
|
72
75
|
soup data merge data1.jsonl data2.jsonl Combine datasets
|
|
73
76
|
soup data dedup <path> --threshold 0.8 Remove duplicates (MinHash)
|
|
@@ -81,7 +84,8 @@ soup data generate ... --quality-pipeline Auto validate + filter + dedup
|
|
|
81
84
|
soup data augment <path> --strategy rephrase|translate|style [--provider ollama|vllm --model <m> --base-url <url>] LLM-driven augmentation
|
|
82
85
|
soup data from-traces --logs l.jsonl --format langchain --signal thumbs_up --output p.jsonl Preference pairs from traces
|
|
83
86
|
soup data from-traces ... --judge --min-confidence 0.7 LLM-judge confidence filter
|
|
84
|
-
soup data review prefs.jsonl --sample 10 Preview preference
|
|
87
|
+
soup data review prefs.jsonl --sample 10 Preview preference pairs
|
|
88
|
+
soup data filter <path> --coherence 0.3 Quality filter (perplexity/coherence)
|
|
85
89
|
soup data sample <path> --n 1000 Random sample subset
|
|
86
90
|
soup data sample <path> --n 1000 --strategy diverse Cluster-based diverse sampling
|
|
87
91
|
soup data sample <path> --n 1000 --strategy hard Sample hardest examples
|
|
@@ -637,3 +637,49 @@ written per node; resume rehydrates from per-node sidecars. Failed rows logged w
|
|
|
637
637
|
redacted reasons (paths stripped, capped at 256 chars).
|
|
638
638
|
|
|
639
639
|
|
|
640
|
+
## Fine-tune Doctor (`soup data doctor`)
|
|
641
|
+
|
|
642
|
+
Chat-template compatibility report — catches the top *silent* fine-tuning failures
|
|
643
|
+
before a single training step:
|
|
644
|
+
|
|
645
|
+
```bash
|
|
646
|
+
soup data doctor ./data/train.jsonl --model meta-llama/Llama-3.1-8B-Instruct
|
|
647
|
+
|
|
648
|
+
# Render N sample rows with per-token trained/masked colouring, through the REAL
|
|
649
|
+
# collator path (answer-only / per-message-train-field / RAFT span-mask)
|
|
650
|
+
soup data doctor ./data/train.jsonl --model meta-llama/Llama-3.1-8B-Instruct --show-mask 5
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
Eight checks, same OK/MINOR/MAJOR taxonomy as `soup diagnose` (exit 0 on OK/MINOR,
|
|
654
|
+
exit 2 on MAJOR): `chat_template` (tokenizer has one), `template_render` (renders
|
|
655
|
+
cleanly on a sample), `generation_markers` (`{% generation %}` support),
|
|
656
|
+
`eos_in_labels` — the **#1 "model never stops generating" bug**: every trained
|
|
657
|
+
assistant turn must actually contain an EOS/EOT token, checked across the *whole*
|
|
658
|
+
trained span, not just the last turn — `bos_duplication` (template + tokenizer both
|
|
659
|
+
prepending BOS), `system_role` (Mistral-style templates that reject a leading system
|
|
660
|
+
turn), `unknown_roles`, and `truncation_risk` (p95 rendered length vs
|
|
661
|
+
`data.max_length`). `--train-on-responses-only` / `--train-on-messages-with-train-field`
|
|
662
|
+
select the same masking strategy `soup train` would use, so the report and
|
|
663
|
+
`--show-mask` preview can never disagree about what's actually trained.
|
|
664
|
+
|
|
665
|
+
|
|
666
|
+
## Preference-Data Linter (`soup data lint`)
|
|
667
|
+
|
|
668
|
+
Catches the top silent degradations in DPO/ORPO/SimPO/IPO/BCO/KTO preference data:
|
|
669
|
+
|
|
670
|
+
```bash
|
|
671
|
+
soup data lint ./data/prefs.jsonl
|
|
672
|
+
soup data lint ./data/prefs.jsonl --model meta-llama/Llama-3.1-8B-Instruct # exact token-length bias, not word count
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
Five checks: `length_bias` — the **#1 silent DPO degradation**: `chosen`
|
|
676
|
+
systematically longer than `rejected`, reported as a Cohen's d effect size —
|
|
677
|
+
`label_imbalance` (KTO desirable:undesirable ratio), `near_duplicates`
|
|
678
|
+
(MinHash/LSH, reuses the `soup data dedup` kernel; requires
|
|
679
|
+
`pip install 'soup-cli[data]'`, degrades to an advisory skip otherwise),
|
|
680
|
+
`identical_pairs` (`chosen == rejected` — zero preference signal), and
|
|
681
|
+
`prompt_leak` (the prompt echoed verbatim inside the completion, a common
|
|
682
|
+
synthetic-data pipeline bug). Same OK/MINOR/MAJOR taxonomy and exit codes as
|
|
683
|
+
`soup data doctor`.
|
|
684
|
+
|
|
685
|
+
|
|
@@ -82,6 +82,10 @@ class DeployTarget(BaseModel):
|
|
|
82
82
|
raise ValueError("deploy path contains null byte")
|
|
83
83
|
if value.startswith("/") or value.startswith("\\"):
|
|
84
84
|
raise ValueError(f"deploy path '{value}' must be relative")
|
|
85
|
+
# Windows drive-absolute (``C:\...`` / ``C:/...``) is absolute too but
|
|
86
|
+
# starts with a letter, so it slipped past the ``/`` / ``\`` check.
|
|
87
|
+
if len(value) >= 2 and value[1] == ":" and value[0].isalpha():
|
|
88
|
+
raise ValueError(f"deploy path '{value}' must be relative")
|
|
85
89
|
# Normalise separators first, then split — a mixed-separator path
|
|
86
90
|
# like ``foo/..\\bar`` would otherwise slip past a single-separator
|
|
87
91
|
# split because ``"..\\bar"`` != ``".."``.
|
|
@@ -510,6 +510,13 @@ app.add_typer(
|
|
|
510
510
|
help="RA-DIT two-stage orchestrator: retriever -> generator (v0.71.10).",
|
|
511
511
|
)
|
|
512
512
|
|
|
513
|
+
# v0.71.27 — Fine-tune Doctor: chat-template doctor + loss-mask X-ray +
|
|
514
|
+
# preference linter.
|
|
515
|
+
from soup_cli.commands import data_doctor as _data_doctor_cmd # noqa: E402
|
|
516
|
+
|
|
517
|
+
data.app.command(name="doctor")(_data_doctor_cmd.doctor)
|
|
518
|
+
data.app.command(name="lint")(_data_doctor_cmd.lint)
|
|
519
|
+
|
|
513
520
|
|
|
514
521
|
def _rewrite_advise_argv(argv: list) -> list:
|
|
515
522
|
"""Inject `run` between `advise` and a non-subcommand first argument.
|
|
@@ -196,7 +196,12 @@ def render_modal_stub(
|
|
|
196
196
|
"@app.local_entrypoint()\n"
|
|
197
197
|
"def main() -> None:\n"
|
|
198
198
|
" train.remote()\n"
|
|
199
|
-
|
|
199
|
+
# Reference the already-repr()-embedded ``_LOCAL_OUTPUT`` via a runtime
|
|
200
|
+
# f-string in the GENERATED code — no user value is interpolated into
|
|
201
|
+
# the stub source here. (Interpolating raw ``{output_dir}`` was a code-
|
|
202
|
+
# injection hole; ``{output_dir!r}`` alone would still break for a path
|
|
203
|
+
# containing a quote because the repr is nested inside a "..." literal.)
|
|
204
|
+
' print(f"Training submitted; download checkpoints to {_LOCAL_OUTPUT}")\n'
|
|
200
205
|
)
|
|
201
206
|
|
|
202
207
|
|
|
@@ -43,7 +43,7 @@ def register(app: typer.Typer, console: Console) -> None:
|
|
|
43
43
|
try:
|
|
44
44
|
rows = load_advise_dataset(data)
|
|
45
45
|
except (FileNotFoundError, ValueError, TypeError) as exc:
|
|
46
|
-
console.print(f"[red]Cannot read dataset:[/] {exc}")
|
|
46
|
+
console.print(f"[red]Cannot read dataset:[/] {escape(str(exc))}")
|
|
47
47
|
raise typer.Exit(1) from exc
|
|
48
48
|
|
|
49
49
|
try:
|
|
@@ -105,7 +105,7 @@ def register(app: typer.Typer, console: Console) -> None:
|
|
|
105
105
|
try:
|
|
106
106
|
rows = load_advise_dataset(data)
|
|
107
107
|
except (FileNotFoundError, ValueError, TypeError) as exc:
|
|
108
|
-
console.print(f"[red]Cannot read dataset:[/] {exc}")
|
|
108
|
+
console.print(f"[red]Cannot read dataset:[/] {escape(str(exc))}")
|
|
109
109
|
raise typer.Exit(1) from exc
|
|
110
110
|
|
|
111
111
|
try:
|
|
@@ -254,6 +254,15 @@ def register(app: typer.Typer, console: Console) -> None:
|
|
|
254
254
|
False, "--json-only",
|
|
255
255
|
help="Suppress Rich output; emit a single JSON verdict line.",
|
|
256
256
|
),
|
|
257
|
+
suite: str = typer.Option(
|
|
258
|
+
None, "--suite",
|
|
259
|
+
help=(
|
|
260
|
+
"Locked eval suite (from `soup eval lock`) to validate as a gate "
|
|
261
|
+
"precondition — a missing / unparseable suite BLOCKS the check "
|
|
262
|
+
"(exit 1). cwd-contained. The generated pre-push hook passes "
|
|
263
|
+
"$GATE_SUITE here so the locked suite is actually enforced."
|
|
264
|
+
),
|
|
265
|
+
),
|
|
257
266
|
) -> None:
|
|
258
267
|
"""Run-vs-run regression check (paired-bootstrap CI).
|
|
259
268
|
|
|
@@ -265,6 +274,26 @@ def register(app: typer.Typer, console: Console) -> None:
|
|
|
265
274
|
"""
|
|
266
275
|
import json as _json
|
|
267
276
|
|
|
277
|
+
# The locked suite is a hard precondition when supplied: validate it
|
|
278
|
+
# exists, is under cwd, and parses. Previously the hook wrote $GATE_SUITE
|
|
279
|
+
# but never used it, so a deleted / tampered locked suite silently
|
|
280
|
+
# passed the gate.
|
|
281
|
+
if suite:
|
|
282
|
+
from soup_cli.utils.eval_lock_coverage import load_locked_suite
|
|
283
|
+
from soup_cli.utils.paths import is_under_cwd
|
|
284
|
+
|
|
285
|
+
if not is_under_cwd(suite):
|
|
286
|
+
console.print(f"[red]--suite is outside cwd:[/] {escape(str(suite))}")
|
|
287
|
+
raise typer.Exit(1)
|
|
288
|
+
try:
|
|
289
|
+
load_locked_suite(suite)
|
|
290
|
+
except (FileNotFoundError, ValueError, OSError) as exc:
|
|
291
|
+
console.print(
|
|
292
|
+
f"[red]Locked eval suite invalid — gate blocked:[/] "
|
|
293
|
+
f"{escape(str(exc))}"
|
|
294
|
+
)
|
|
295
|
+
raise typer.Exit(1) from exc
|
|
296
|
+
|
|
268
297
|
from soup_cli.experiment.tracker import ExperimentTracker
|
|
269
298
|
from soup_cli.utils.eval_gate_hook import (
|
|
270
299
|
GateThresholds,
|
|
@@ -194,6 +194,11 @@ def bench(
|
|
|
194
194
|
start_load = time.time()
|
|
195
195
|
try:
|
|
196
196
|
model_obj, tokenizer = _load_model(str(model_path), base, device)
|
|
197
|
+
except typer.Exit:
|
|
198
|
+
# typer.Exit subclasses RuntimeError, so the broad except below would
|
|
199
|
+
# swallow an already-reported CLI exit and mis-print "Failed to load
|
|
200
|
+
# model: 1". Let it propagate unchanged.
|
|
201
|
+
raise
|
|
197
202
|
except (OSError, ImportError, RuntimeError, ValueError) as exc:
|
|
198
203
|
console.print(f"[red]Failed to load model:[/] {exc}")
|
|
199
204
|
raise typer.Exit(1) from exc
|
|
@@ -754,11 +754,12 @@ def sample_data(
|
|
|
754
754
|
if output is None:
|
|
755
755
|
out_path = file_path.parent / f"{file_path.stem}_sampled_{strategy}.jsonl"
|
|
756
756
|
else:
|
|
757
|
+
from soup_cli.utils.paths import is_under_cwd
|
|
758
|
+
|
|
757
759
|
out_path = Path(output).resolve()
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
except ValueError:
|
|
760
|
+
# realpath + commonpath (is_under_cwd) — Path.resolve()+relative_to()
|
|
761
|
+
# breaks on Windows 8.3 short names.
|
|
762
|
+
if not is_under_cwd(output):
|
|
762
763
|
console.print("[red]Output path must be under the current working directory.[/]")
|
|
763
764
|
raise typer.Exit(1)
|
|
764
765
|
|
|
@@ -812,6 +813,13 @@ def split_data(
|
|
|
812
813
|
console.print("[red]Specify at least one of --val or --test.[/]")
|
|
813
814
|
raise typer.Exit(1)
|
|
814
815
|
|
|
816
|
+
# Reject negatives: a negative val/test slipped past the `>= total` check
|
|
817
|
+
# and produced a negative slice (e.g. --val -10 sent 90 rows to val, 10 to
|
|
818
|
+
# train — a silently inverted split).
|
|
819
|
+
if (val is not None and val < 0) or (test is not None and test < 0):
|
|
820
|
+
console.print("[red]--val and --test must be non-negative.[/]")
|
|
821
|
+
raise typer.Exit(1)
|
|
822
|
+
|
|
815
823
|
data = load_raw_data(file_path)
|
|
816
824
|
if not data:
|
|
817
825
|
console.print("[red]Dataset is empty.[/]")
|
|
@@ -1265,25 +1273,23 @@ def download_dataset(
|
|
|
1265
1273
|
raise typer.Exit(1)
|
|
1266
1274
|
|
|
1267
1275
|
# Resolve output path
|
|
1276
|
+
from soup_cli.utils.paths import is_under_cwd
|
|
1277
|
+
|
|
1268
1278
|
if output is None:
|
|
1269
1279
|
ds_name = dataset_id.split("/")[-1] if "/" in dataset_id else dataset_id
|
|
1270
1280
|
# Strip embedded path separators to prevent traversal
|
|
1271
1281
|
ds_name = Path(ds_name).name
|
|
1272
1282
|
out_path = (Path.cwd() / f"{ds_name}.jsonl").resolve()
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
except ValueError:
|
|
1283
|
+
# realpath + commonpath (is_under_cwd) — Path.resolve()+relative_to()
|
|
1284
|
+
# breaks on Windows 8.3 short names.
|
|
1285
|
+
if not is_under_cwd(out_path):
|
|
1277
1286
|
console.print(
|
|
1278
1287
|
"[red]Derived output path escapes working directory.[/]"
|
|
1279
1288
|
)
|
|
1280
1289
|
raise typer.Exit(1)
|
|
1281
1290
|
else:
|
|
1282
1291
|
out_path = Path(output).resolve()
|
|
1283
|
-
|
|
1284
|
-
try:
|
|
1285
|
-
out_path.relative_to(cwd)
|
|
1286
|
-
except ValueError:
|
|
1292
|
+
if not is_under_cwd(output):
|
|
1287
1293
|
console.print(
|
|
1288
1294
|
"[red]Output path must be under the current working directory.[/]"
|
|
1289
1295
|
)
|