soup-cli 0.71.38__tar.gz → 0.71.40__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.38 → soup_cli-0.71.40}/CHANGELOG.md +86 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/CONTRIBUTING.md +1 -1
- {soup_cli-0.71.38 → soup_cli-0.71.40}/PKG-INFO +33 -27
- {soup_cli-0.71.38 → soup_cli-0.71.40}/README.md +32 -26
- {soup_cli-0.71.38 → soup_cli-0.71.40}/docs/commands.md +8 -1
- {soup_cli-0.71.38 → soup_cli-0.71.40}/docs/evaluation.md +30 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/docs/training.md +31 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/pyproject.toml +1 -1
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/cli.py +12 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/ci.py +7 -0
- soup_cli-0.71.40/src/soup_cli/commands/reward.py +225 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/ship.py +323 -22
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/config/schema.py +102 -4
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/envs/calculator.py +2 -1
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/envs/guess_number.py +1 -1
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/grpo.py +9 -3
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/rewards.py +41 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/ci_workflow.py +42 -4
- soup_cli-0.71.40/src/soup_cli/utils/reward_synth.py +716 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/ship_verdict.py +78 -1
- soup_cli-0.71.40/tests/test_v07139.py +802 -0
- soup_cli-0.71.40/tests/test_v07140.py +855 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/.dockerignore +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/.github/FUNDING.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/.github/pull_request_template.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/.gitignore +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/.mailmap +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/AGENTS.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/CODEOWNERS +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/CONTRIBUTORS.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/Dockerfile +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/LICENSE +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/NOTICE +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/SECURITY.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/docker-compose.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/docs/README.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/docs/adapters-and-governance.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/docs/backends-and-ops.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/docs/compliance.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/docs/data.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/docs/models.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/docs/peft-and-efficiency.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/docs/performance-and-quantization.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/docs/serving-and-export.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/examples/README.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/examples/reward_hacking/rewards.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/soup.png +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/soup_logo_svg.svg +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/cloud/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/cloud/modal.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/_eval_v0650.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/_eval_v07110.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/adapters.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/advise.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/card.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/data.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/data_canary.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/data_doctor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/data_topics.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/diagnose.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/draft.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/mcp.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/ra_dit.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/serve.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/shrink.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/spectrum.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/train.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/_fixtures/gate/format_json.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/_fixtures/gate/safety.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/_fixtures/gate/tool_call.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/loader.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/envs/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/envs/_common.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/envs/retrieval_qa.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/eval/gate_suites.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/mcp_server/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/mcp_server/registry.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/mcp_server/server.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/recipes/catalog.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/registry/store.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/eu-ai-act.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/hipaa.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/soc2.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/sr-11-7.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/asr.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/bitnet.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/mole_routing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/online_dpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/ppo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/raft.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/sft.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/tts.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/ui/app.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/adapter_arithmetic.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/adapter_fuse.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/advise.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/agent_sandbox.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/asr_metrics.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/best_of_n.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/canary.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/data_doctor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/data_lint.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/diagnose/citation.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/diagnose/live.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/draft.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/edit_kernels.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/embed.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/evolve.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/harm_probe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/hubs.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/interference_live.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/lisa.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/live_eval.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/mod.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/peft_wiring.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/prm_reward.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/probe_kernel.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/ra_dit_run.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/raft.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/rehearsal.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/reward_hack_control.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/rl_checkpoint.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/semdedup.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/shrink.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/spectrum_scan.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/topics.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/truth_probe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/tts_codec.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/unlearn_kernels.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/templates/chat.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/templates/code.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/templates/medical.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/conftest.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/qa/v07114_qa.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_adapters.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_audio.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_autopilot.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_bco.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_bench.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_build_dag.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_callback.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_cans.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_chat.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_chat_template.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_cli.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_code_review_critical.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_code_review_deferred.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_code_review_high.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_code_review_medium_low.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_code_review_recurring.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_config.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_cost.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_curriculum.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_data.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_data_augment.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_data_sample.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_data_split.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_data_tools.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_diff.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_display.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_doctor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_embedding.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_errors.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_eval.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_export.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_formats.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_generate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_gpu.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_grpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_infer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_init.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_ipo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_kto.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_loader.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_log_level.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_merge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_migrate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_moe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_orpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_packing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_part_a_wave1.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_performance.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_ppo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_pretrain.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_profile.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_profiling.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_progress.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_push.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_qat.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_quant_check.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_quickstart.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_recipes.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_registry.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_relora.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_replay.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_resume.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_review_fixes_v07133.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_rlvr.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_run_cost.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_runs.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_serve.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_server_generate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_simpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_sweep.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_tracker.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_training_speed.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_tui.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_ui.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_unsloth.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0420.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0450.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0490.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0510.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0520.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0530.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v05310.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v05311.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0532.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0533.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0534.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0535.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0536.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0537.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0538.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0539.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0540.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0550.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0560.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0580.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0590.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07110.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07111.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07112.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07113.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07114.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07115.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07116.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07117.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07118.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07119.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0712.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07120.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07121.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07122.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07123.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07124.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07125.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07126.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07127.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07128.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07129.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0713.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07130.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07131.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07132.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07133.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07134.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07135.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07136.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07137.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v07138.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0714.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0715.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0716.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0717.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0718.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_v0719.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_validator.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_vision.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_warmup.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_why.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.40}/tests/test_windows_encoding.py +0 -0
|
@@ -12,6 +12,92 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.71.40] - 2026-07-19
|
|
16
|
+
|
|
17
|
+
**`soup reward synth`: auto-generate a deterministic reward verifier from your data.**
|
|
18
|
+
Point it at a JSONL of reference (gold) outputs and it infers a verifier, emits a
|
|
19
|
+
readable / committable `.py` reward function, and — the moat — *refuses* to emit one
|
|
20
|
+
that can't tell your references from auto-generated bad answers. Nothing in
|
|
21
|
+
TRL / Unsloth / Axolotl / OpenRLHF synthesizes a reward; every reward today is
|
|
22
|
+
hand-written, hand-picked, or a trained-weights artifact.
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- **`soup reward synth <references.jsonl> -o reward.py`** — deterministic verifier
|
|
27
|
+
synthesis. Four families, auto-detected (or pick with `--kind`): `numeric`
|
|
28
|
+
(last-number / `\boxed{}` / `####` extraction, exact or `--tolerance`), `json_schema`
|
|
29
|
+
(induced keys + types + required), `regex` (positional char-classes over
|
|
30
|
+
equal-length golds), `tool_call` (per-tool `required`/`allowed` argument binding).
|
|
31
|
+
The emitted file is self-contained and rides `load_reward_fn`'s existing `.py`
|
|
32
|
+
path — no new trusted-exec surface; you read, edit, commit, and diff it.
|
|
33
|
+
- **Mandatory calibration report** — the synthesized verifier is loaded back and run
|
|
34
|
+
against its own references (must accept ≥90%) and auto-perturbed negatives (must
|
|
35
|
+
reject). A degenerate always-accept verifier is **refused** (`exit 2`), never
|
|
36
|
+
silently emitted. `--plan-only` reports the induced spec without writing;
|
|
37
|
+
`--output-report` persists the calibration JSON.
|
|
38
|
+
- **Comma-separated `reward_fn` (`"accuracy,format"`)** now trains — it resolves to a
|
|
39
|
+
reward *ensemble* (`GRPOTrainer(reward_funcs=[...])`, and unlocks the `rm_ensemble`
|
|
40
|
+
reward-hack detector which needs ≥2 rewards). GRPO-only, validated at config-parse
|
|
41
|
+
time. Fixes a recipe (`deepseek-v3-reasoning`) that shipped exactly this and
|
|
42
|
+
previously crashed with `Unknown reward function` (#311).
|
|
43
|
+
|
|
44
|
+
### Changed / Fixed
|
|
45
|
+
|
|
46
|
+
- `training.reward_fn` gains a field validator (null-byte / blank / oversize /
|
|
47
|
+
empty-comma-segment rejection) — the oldest arbitrary-code field was the least
|
|
48
|
+
guarded. Comma + `verifiable` without a `verifiable_domain` now fails at parse
|
|
49
|
+
time like the bare `verifiable` form.
|
|
50
|
+
- `envs/calculator.py` / `envs/guess_number.py` docstrings corrected: the reward is
|
|
51
|
+
`reward_fn: verifiable` + `verifiable_domain: math` (the bare `reward_fn='math'`
|
|
52
|
+
they showed was never valid).
|
|
53
|
+
|
|
54
|
+
## [0.71.39] - 2026-07-19
|
|
55
|
+
|
|
56
|
+
**"CI for weights, not prompts": close the evidence loop.** `soup ship`'s verdict is
|
|
57
|
+
now something Soup can emit, commit, review, and bind to the exact model that
|
|
58
|
+
produced it — turning the `soup ci init` gate from "edit two numbers in a JSON file"
|
|
59
|
+
into a reproducible, provenance-bound check that renders on every PR.
|
|
60
|
+
|
|
61
|
+
### Added
|
|
62
|
+
|
|
63
|
+
- **`soup ship --emit-evidence <path>`** — re-serialises the verdict into the
|
|
64
|
+
`--evidence` INPUT schema, so a run's output is replayable as input: feeding it
|
|
65
|
+
back through `--evidence` (same `--forgetting-threshold`) reproduces an identical
|
|
66
|
+
verdict. Output is finally input.
|
|
67
|
+
- **`ShipConfig` under `eval.ship` in `soup.yaml` + `soup ship --config soup.yaml`** —
|
|
68
|
+
commit the gate policy (`task_eval` / `task_mode` / `general_suite` /
|
|
69
|
+
`forgetting_threshold` / `judge_model` / `baseline`) so the verdict is reviewable in
|
|
70
|
+
a PR diff and reproducible. An explicit CLI flag always wins (CLI > config > default).
|
|
71
|
+
- **`soup ship --push owner/repo#N`** — post the verdict as a GitHub PR comment
|
|
72
|
+
(reuses the `soup adapters pr --push` `gh api` plumbing). Best-effort: a missing
|
|
73
|
+
token / `gh` failure warns but never flips the SHIP / DON'T-SHIP exit code.
|
|
74
|
+
- **Evidence provenance + staleness gate.** With `--emit-evidence`, `--config` STAMPS
|
|
75
|
+
a `provenance` block (`config_sha` — a semantic, order-insensitive recipe hash — plus
|
|
76
|
+
`base_model` and a best-effort `data_sha`) onto the evidence. With `--evidence`
|
|
77
|
+
alone, `--config` GATES: it refuses (exit 3) evidence whose `config_sha` drifted
|
|
78
|
+
from the committed config, so a PR that changed `soup.yaml` but forgot to recompute
|
|
79
|
+
its evidence is caught. The gate policy (`eval.ship`) is EXCLUDED from the hash, so
|
|
80
|
+
tuning `forgetting_threshold` never falsely invalidates evidence about an unchanged
|
|
81
|
+
model.
|
|
82
|
+
- **`soup ci init --config <soup.yaml>`** — binds the generated gate's `soup ship`
|
|
83
|
+
step to the committed config (provenance/staleness enforcement in CI).
|
|
84
|
+
|
|
85
|
+
### Changed
|
|
86
|
+
|
|
87
|
+
- **Exit-code note:** `soup ship --config` usage / staleness errors are exit `3`
|
|
88
|
+
(usage), preserving `0 = SHIP`, `2 = DON'T SHIP`, `1 = runtime` from v0.71.38.
|
|
89
|
+
|
|
90
|
+
### Security
|
|
91
|
+
|
|
92
|
+
- `provenance.config_sha` read from untrusted evidence is shape-validated as a hex
|
|
93
|
+
digest before being echoed (a raw value could smuggle terminal ESC bytes past
|
|
94
|
+
`rich.markup.escape`).
|
|
95
|
+
- `provenance.data_sha` hashes the training file through an `O_NOFOLLOW` fd with a
|
|
96
|
+
symlink-rejecting containment check and an 8 GiB cap (was an unguarded `hash_file`).
|
|
97
|
+
- `soup ci init`'s path validation now rejects `#` and the YAML 1.1 line breaks
|
|
98
|
+
(NEL / LS / PS), closing a plain-scalar comment-truncation of the generated `run:`
|
|
99
|
+
step (also hardens the pre-existing `--data` / `--suite` / `--evidence` args).
|
|
100
|
+
|
|
15
101
|
## [0.71.38] - 2026-07-17
|
|
16
102
|
|
|
17
103
|
**`soup ship`'s regression leg now has teeth.** Leg 2 (the catastrophic-forgetting
|
|
@@ -120,7 +120,7 @@ src/soup_cli/
|
|
|
120
120
|
templates/ - 21 built-in soup.yaml templates (YAML + manifest.json) with load_template loader (v0.39.0, +bco v0.40.0, +4 compliance v0.71.35)
|
|
121
121
|
ui/ - Web UI (FastAPI + HTML/JS SPA)
|
|
122
122
|
|
|
123
|
-
tests/ - Test suite (
|
|
123
|
+
tests/ - Test suite (318 files, 16490 tests)
|
|
124
124
|
examples/ - Real-world config examples and datasets
|
|
125
125
|
```
|
|
126
126
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: soup-cli
|
|
3
|
-
Version: 0.71.
|
|
3
|
+
Version: 0.71.40
|
|
4
4
|
Summary: Fine-tune and post-train LLMs in one command. No SSH, no config hell.
|
|
5
5
|
Project-URL: Homepage, https://github.com/MakazhanAlpamys/Soup
|
|
6
6
|
Project-URL: Repository, https://github.com/MakazhanAlpamys/Soup
|
|
@@ -193,41 +193,47 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
193
193
|
|
|
194
194
|
## What's New
|
|
195
195
|
|
|
196
|
-
**v0.71.
|
|
197
|
-
|
|
198
|
-
- **
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
- **
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
DON'T-SHIP — a typo'd flag is no longer indistinguishable from a caught regression.
|
|
209
|
-
- **Breaking, on purpose.** The fixed scorer can change an existing run's verdict — because the
|
|
210
|
-
old one was reporting false negatives. Recompute any committed `--baseline`.
|
|
196
|
+
**v0.71.40 — `soup reward synth`: generate a reward verifier from your data.** Point it at a JSONL of reference (gold) outputs and it infers a deterministic verifier, writes a readable / committable `.py` reward function, and — the part nobody else does — *refuses* to emit one that can't tell your references from bad answers. Nothing in TRL / Unsloth / Axolotl synthesizes a reward.
|
|
197
|
+
|
|
198
|
+
- **Four families, auto-detected** (or pick with `--kind`): `numeric` (`\boxed{}` / `####` / last-number,
|
|
199
|
+
exact or `--tolerance`), `json_schema` (induced keys + types + required), `regex`, and `tool_call`
|
|
200
|
+
(per-tool `required`/`allowed` argument binding — a call can't borrow another tool's keys).
|
|
201
|
+
- **A calibration report is the moat.** The verifier is loaded back and run against its own references
|
|
202
|
+
(must accept ≥ 90%) and auto-generated bad answers (must reject). A degenerate always-accept verifier
|
|
203
|
+
is **refused** (exit 2), never silently shipped. `--plan-only` previews; `--output-report` saves the JSON.
|
|
204
|
+
- **No new exec surface.** The emitted file rides the existing `reward_fn: reward.py` path — you read,
|
|
205
|
+
edit, commit, and diff it like any other reward.
|
|
206
|
+
- **Reward ensembles now train.** `reward_fn: "accuracy,format"` loads as multiple rewards (and unlocks
|
|
207
|
+
the `rm_ensemble` reward-hack detector) — a recipe that shipped exactly this used to crash. (#311)
|
|
211
208
|
|
|
212
209
|
```bash
|
|
213
|
-
#
|
|
214
|
-
soup
|
|
215
|
-
# exit 0 = SHIP · 2 = DON'T SHIP · 3 = bad flags · 1 = runtime error
|
|
210
|
+
# synth a verifier from reference answers, calibrate it, keep it only if it discriminates
|
|
211
|
+
soup reward synth references.jsonl -o reward.py --output-report calib.json
|
|
216
212
|
|
|
217
|
-
|
|
213
|
+
# then train against the reward you just generated
|
|
214
|
+
# training: { reward_fn: reward.py } (or an ensemble: reward_fn: "accuracy,format")
|
|
218
215
|
```
|
|
219
216
|
|
|
220
217
|
<details>
|
|
221
|
-
<summary>Previous release — v0.71.
|
|
218
|
+
<summary>Previous release — v0.71.39, CI for weights not prompts (emit + provenance-bind the ship verdict)</summary>
|
|
219
|
+
|
|
220
|
+
`soup ship`'s verdict became emittable, committable, and provenance-bound: `--emit-evidence` makes a
|
|
221
|
+
run replay into an identical verdict, `eval.ship` in `soup.yaml` + `--config` makes the gate policy
|
|
222
|
+
reviewable, and `--config` binds evidence to the exact recipe that produced it (stale evidence → exit 3).
|
|
223
|
+
`soup ship --push owner/repo#N` posts the SHIP / DON'T-SHIP card on the PR.
|
|
224
|
+
|
|
225
|
+
</details>
|
|
226
|
+
|
|
227
|
+
<details>
|
|
228
|
+
<summary>Previous release — v0.71.38, The gate grows teeth (real leg-2 regression gate)</summary>
|
|
222
229
|
|
|
223
|
-
`soup
|
|
224
|
-
|
|
225
|
-
|
|
230
|
+
`soup ship`'s regression leg became real: a fixed, extraction-based scorer over seven bundled,
|
|
231
|
+
offline suites (MCQ · arithmetic · tool-calling · JSON validity · safety/refusal). A tune that
|
|
232
|
+
wins your task but quietly breaks tool-calling now gets a **DON'T SHIP**. Zero new deps.
|
|
226
233
|
|
|
227
234
|
```bash
|
|
228
|
-
soup
|
|
229
|
-
|
|
230
|
-
soup train --config sft.yaml --replay old_task.jsonl --replay-ratio 0.1
|
|
235
|
+
soup ship --base ./base --adapter ./my-lora --task-eval my_task.jsonl
|
|
236
|
+
# exit 0 = SHIP · 2 = DON'T SHIP · 3 = bad flags · 1 = runtime error
|
|
231
237
|
```
|
|
232
238
|
|
|
233
239
|
</details>
|
|
@@ -49,41 +49,47 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
49
49
|
|
|
50
50
|
## What's New
|
|
51
51
|
|
|
52
|
-
**v0.71.
|
|
53
|
-
|
|
54
|
-
- **
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
- **
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
DON'T-SHIP — a typo'd flag is no longer indistinguishable from a caught regression.
|
|
65
|
-
- **Breaking, on purpose.** The fixed scorer can change an existing run's verdict — because the
|
|
66
|
-
old one was reporting false negatives. Recompute any committed `--baseline`.
|
|
52
|
+
**v0.71.40 — `soup reward synth`: generate a reward verifier from your data.** Point it at a JSONL of reference (gold) outputs and it infers a deterministic verifier, writes a readable / committable `.py` reward function, and — the part nobody else does — *refuses* to emit one that can't tell your references from bad answers. Nothing in TRL / Unsloth / Axolotl synthesizes a reward.
|
|
53
|
+
|
|
54
|
+
- **Four families, auto-detected** (or pick with `--kind`): `numeric` (`\boxed{}` / `####` / last-number,
|
|
55
|
+
exact or `--tolerance`), `json_schema` (induced keys + types + required), `regex`, and `tool_call`
|
|
56
|
+
(per-tool `required`/`allowed` argument binding — a call can't borrow another tool's keys).
|
|
57
|
+
- **A calibration report is the moat.** The verifier is loaded back and run against its own references
|
|
58
|
+
(must accept ≥ 90%) and auto-generated bad answers (must reject). A degenerate always-accept verifier
|
|
59
|
+
is **refused** (exit 2), never silently shipped. `--plan-only` previews; `--output-report` saves the JSON.
|
|
60
|
+
- **No new exec surface.** The emitted file rides the existing `reward_fn: reward.py` path — you read,
|
|
61
|
+
edit, commit, and diff it like any other reward.
|
|
62
|
+
- **Reward ensembles now train.** `reward_fn: "accuracy,format"` loads as multiple rewards (and unlocks
|
|
63
|
+
the `rm_ensemble` reward-hack detector) — a recipe that shipped exactly this used to crash. (#311)
|
|
67
64
|
|
|
68
65
|
```bash
|
|
69
|
-
#
|
|
70
|
-
soup
|
|
71
|
-
# exit 0 = SHIP · 2 = DON'T SHIP · 3 = bad flags · 1 = runtime error
|
|
66
|
+
# synth a verifier from reference answers, calibrate it, keep it only if it discriminates
|
|
67
|
+
soup reward synth references.jsonl -o reward.py --output-report calib.json
|
|
72
68
|
|
|
73
|
-
|
|
69
|
+
# then train against the reward you just generated
|
|
70
|
+
# training: { reward_fn: reward.py } (or an ensemble: reward_fn: "accuracy,format")
|
|
74
71
|
```
|
|
75
72
|
|
|
76
73
|
<details>
|
|
77
|
-
<summary>Previous release — v0.71.
|
|
74
|
+
<summary>Previous release — v0.71.39, CI for weights not prompts (emit + provenance-bind the ship verdict)</summary>
|
|
78
75
|
|
|
79
|
-
`soup
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
`soup ship`'s verdict became emittable, committable, and provenance-bound: `--emit-evidence` makes a
|
|
77
|
+
run replay into an identical verdict, `eval.ship` in `soup.yaml` + `--config` makes the gate policy
|
|
78
|
+
reviewable, and `--config` binds evidence to the exact recipe that produced it (stale evidence → exit 3).
|
|
79
|
+
`soup ship --push owner/repo#N` posts the SHIP / DON'T-SHIP card on the PR.
|
|
80
|
+
|
|
81
|
+
</details>
|
|
82
|
+
|
|
83
|
+
<details>
|
|
84
|
+
<summary>Previous release — v0.71.38, The gate grows teeth (real leg-2 regression gate)</summary>
|
|
85
|
+
|
|
86
|
+
`soup ship`'s regression leg became real: a fixed, extraction-based scorer over seven bundled,
|
|
87
|
+
offline suites (MCQ · arithmetic · tool-calling · JSON validity · safety/refusal). A tune that
|
|
88
|
+
wins your task but quietly breaks tool-calling now gets a **DON'T SHIP**. Zero new deps.
|
|
82
89
|
|
|
83
90
|
```bash
|
|
84
|
-
soup
|
|
85
|
-
|
|
86
|
-
soup train --config sft.yaml --replay old_task.jsonl --replay-ratio 0.1
|
|
91
|
+
soup ship --base ./base --adapter ./my-lora --task-eval my_task.jsonl
|
|
92
|
+
# exit 0 = SHIP · 2 = DON'T SHIP · 3 = bad flags · 1 = runtime error
|
|
87
93
|
```
|
|
88
94
|
|
|
89
95
|
</details>
|
|
@@ -166,9 +166,12 @@ soup ship ... --task-mode judge_score --judge-model ollama://llama3.1 Leg-1 via
|
|
|
166
166
|
soup ship ... --task-mode pairwise --judge-model ollama://llama3.1 Leg-1 via swap-debiased judge win-rate (base=0.5) (v0.71.31)
|
|
167
167
|
soup ship ... # leg-2 default = 7 bundled offline suites (MCQ/arithmetic + tool_call/format_json/safety, extraction scorer, ~40 items each) (v0.71.38)
|
|
168
168
|
soup ship ... --general-suite mmlu,gsm8k --baseline base.json lm-eval leg-2 override + recorded base scores
|
|
169
|
+
soup ship ... --emit-evidence ev.json Re-serialise the scores as replayable --evidence input (output-is-input, #312) (v0.71.39)
|
|
170
|
+
soup ship ... --config soup.yaml Read eval.ship gate defaults; --evidence GATES on provenance, --emit-evidence STAMPS it (v0.71.39)
|
|
171
|
+
soup ship ... --push owner/repo#N Post the verdict as a GitHub PR comment (best-effort; never flips the exit code) (v0.71.39)
|
|
169
172
|
soup card <registry-id> -o MODELCARD.md HF model card from a registry entry: training config, evals, hashes, lineage, artifacts (v0.71.35)
|
|
170
173
|
soup push --model ./out --repo you/m --card <registry-id> Upload that registry-driven card as the README (HF only) (v0.71.35)
|
|
171
|
-
soup ci init [--data d.jsonl --suite s.yaml --evidence ev.json] [--branch main --python 3.11] [--force] Write .github/workflows/soup-gate.yml: data validate -> expect -> ship gate on every PR (v0.71.35)
|
|
174
|
+
soup ci init [--data d.jsonl --suite s.yaml --evidence ev.json] [--config soup.yaml] [--branch main --python 3.11] [--force] Write .github/workflows/soup-gate.yml: data validate -> expect -> ship gate on every PR (v0.71.35); --config binds the gate to a committed config so it refuses stale evidence (v0.71.39)
|
|
172
175
|
soup mcp serve MCP server over stdio (drive Soup from Claude Code / Cursor / Cline; requires [mcp] extra) (v0.71.28)
|
|
173
176
|
soup mcp serve --allow-mutating Also expose plan-only train_start / export tools (never execute) (v0.71.28)
|
|
174
177
|
soup shrink --model <id|path> --drop-ratio 0.25 --calib c.jsonl -o shrunk Depth-prune least-important layer block + SHIP/DON'T-SHIP ppl verdict (exit 0/2/1) (v0.71.29)
|
|
@@ -179,6 +182,10 @@ soup draft measure ... --min-acceptance 0.6 -o report.json Exit 2 below the flo
|
|
|
179
182
|
soup draft distill --target <tuned> --draft-base <tiny> --data d.jsonl -o draft/ Distil a DENSE speculative-decoding draft + register it (v0.71.33)
|
|
180
183
|
soup draft distill ... --steps N --device cpu --force --plan-only Training budget / device / overwrite -o / render the config only
|
|
181
184
|
soup draft list List local drafts that `soup serve --auto-spec` will pick up (v0.71.33)
|
|
185
|
+
soup reward synth refs.jsonl -o reward.py Synthesize a deterministic reward verifier from gold outputs (v0.71.40)
|
|
186
|
+
soup reward synth ... --kind numeric|json_schema|regex|tool_call Force a verifier family (default: auto-detect)
|
|
187
|
+
soup reward synth ... --plan-only Report the induced spec + calibration plan; write nothing
|
|
188
|
+
soup reward synth ... --output-report r.json --min-discrimination 0.5 Save the calibration JSON / set the refusal threshold (exit 0 emit / 2 refuse / 1 error)
|
|
182
189
|
soup tui Full-screen Textual dashboard (requires [tui] extra)
|
|
183
190
|
soup train --config soup.yaml --profile Record torch.profiler trace to <output>/profiles/
|
|
184
191
|
soup --log-level quiet|normal|verbose|debug Global logging tier (Rich-formatted)
|
|
@@ -378,6 +378,36 @@ Exit codes (v0.71.38): **0 = SHIP · 2 = DON'T SHIP · 3 = usage/flag error · 1
|
|
|
378
378
|
lives in `soup_cli.utils.ship_verdict` (`decide_ship` is a pure function — the whole truth table
|
|
379
379
|
is CPU-testable); the bundled suites live in `soup_cli.eval.gate_suites`.
|
|
380
380
|
|
|
381
|
+
### Closing the evidence loop (v0.71.39)
|
|
382
|
+
|
|
383
|
+
The verdict is now emittable, committable, and provenance-bound so a fine-tuning gate runs on
|
|
384
|
+
every PR instead of relying on a hand-edited JSON file.
|
|
385
|
+
|
|
386
|
+
- **`--emit-evidence <path>`** re-serialises the scores into the `--evidence` INPUT schema, so a
|
|
387
|
+
run's output is replayable as input — feeding it back through `--evidence` (same threshold)
|
|
388
|
+
reproduces an identical verdict.
|
|
389
|
+
- **`--config soup.yaml`** reads a committed `eval.ship` block for the gate defaults
|
|
390
|
+
(`task_eval` / `task_mode` / `general_suite` / `forgetting_threshold` / `judge_model` /
|
|
391
|
+
`baseline`); an explicit CLI flag always wins. This makes the gate reviewable in a PR diff.
|
|
392
|
+
- **Provenance + staleness.** With `--emit-evidence`, `--config` STAMPS a `provenance` block
|
|
393
|
+
(`config_sha` — a semantic, order-insensitive recipe hash that EXCLUDES the `eval.ship` gate
|
|
394
|
+
policy, so tuning the threshold never invalidates evidence — plus `base_model` and a
|
|
395
|
+
best-effort `data_sha`). With `--evidence` alone, `--config` GATES: it refuses (exit 3)
|
|
396
|
+
evidence whose `config_sha` drifted from the committed config.
|
|
397
|
+
- **`--push owner/repo#N`** posts the verdict as a GitHub PR comment (best-effort — a missing
|
|
398
|
+
token or `gh` failure warns but never flips the SHIP / DON'T-SHIP exit code).
|
|
399
|
+
|
|
400
|
+
```bash
|
|
401
|
+
# Producer (train job): compute or stamp scores, bound to the committed recipe
|
|
402
|
+
soup ship --evidence scores.json --config soup.yaml --emit-evidence ship_evidence.json
|
|
403
|
+
|
|
404
|
+
# Gate (PR CI): refuse evidence that doesn't match the committed config, comment the verdict
|
|
405
|
+
soup ship --evidence ship_evidence.json --config soup.yaml --push owner/repo#42
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
`soup ci init --config soup.yaml` binds the generated workflow's ship step to the committed
|
|
409
|
+
config, so the whole loop runs in CI (see [commands.md](commands.md)).
|
|
410
|
+
|
|
381
411
|
|
|
382
412
|
## NLG Evaluation Metrics (BLEU + ROUGE)
|
|
383
413
|
|
|
@@ -866,6 +866,37 @@ training:
|
|
|
866
866
|
reward_fn: ./my_reward.py
|
|
867
867
|
```
|
|
868
868
|
|
|
869
|
+
**Reward ensembles** — list several rewards, comma-separated, and they combine (GRPO only).
|
|
870
|
+
This also unlocks the `rm_ensemble` reward-hack detector, which needs ≥ 2 rewards:
|
|
871
|
+
```yaml
|
|
872
|
+
training:
|
|
873
|
+
reward_fn: "accuracy,format" # both are scored every step
|
|
874
|
+
```
|
|
875
|
+
|
|
876
|
+
### Synthesize a verifier from your data (`soup reward synth`)
|
|
877
|
+
|
|
878
|
+
Don't hand-write a verifier — generate one from reference (gold) outputs. Soup infers a
|
|
879
|
+
*deterministic* verifier (numeric / JSON-schema / regex / tool-call), writes a readable, editable
|
|
880
|
+
`.py`, and **refuses to emit** one that can't tell your references from auto-generated bad answers
|
|
881
|
+
(the mandatory calibration report). The emitted file is a normal `reward_fn: reward.py`.
|
|
882
|
+
|
|
883
|
+
```bash
|
|
884
|
+
# infer + calibrate + emit (exit 0 kept, 2 refused, 1 error)
|
|
885
|
+
soup reward synth references.jsonl -o reward.py --output-report calib.json
|
|
886
|
+
|
|
887
|
+
# preview the induced spec without writing anything
|
|
888
|
+
soup reward synth references.jsonl --plan-only
|
|
889
|
+
|
|
890
|
+
# force a family instead of auto-detecting
|
|
891
|
+
soup reward synth answers.jsonl -o reward.py --kind numeric --tolerance 1e-6
|
|
892
|
+
```
|
|
893
|
+
|
|
894
|
+
References are a JSONL where each row's gold answer is in an `answer` field (override with
|
|
895
|
+
`--field`) or the last assistant turn of a `messages` list. `--min-discrimination` sets how
|
|
896
|
+
strongly the verifier must separate references from perturbed negatives before it's emitted.
|
|
897
|
+
v1 is deterministic families only — a `\boxed{}`/`####` marker helps the numeric verifier, and
|
|
898
|
+
completions are prompted to mark their answer (standard RLVR practice).
|
|
899
|
+
|
|
869
900
|
### Verifiable Rewards (RLVR)
|
|
870
901
|
|
|
871
902
|
Use `reward_fn: verifiable` with a `verifiable_domain` for deterministic, math-checkable rewards — no judge model, no heuristics. Great for GRPO on math, code, or structured-output tasks.
|
|
@@ -563,6 +563,18 @@ app.add_typer(
|
|
|
563
563
|
),
|
|
564
564
|
)
|
|
565
565
|
|
|
566
|
+
# v0.71.40 — `soup reward synth` auto-generate a deterministic verifier.
|
|
567
|
+
from soup_cli.commands import reward as _reward_cmd # noqa: E402
|
|
568
|
+
|
|
569
|
+
app.add_typer(
|
|
570
|
+
_reward_cmd.app,
|
|
571
|
+
name="reward",
|
|
572
|
+
help=(
|
|
573
|
+
"Synthesize a deterministic reward verifier from reference outputs, with "
|
|
574
|
+
"a calibration report that refuses degenerate verifiers (v0.71.40)."
|
|
575
|
+
),
|
|
576
|
+
)
|
|
577
|
+
|
|
566
578
|
|
|
567
579
|
def _rewrite_advise_argv(argv: list) -> list:
|
|
568
580
|
"""Inject `run` between `advise` and a non-subcommand first argument.
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
+
from typing import Optional
|
|
10
|
+
|
|
9
11
|
import typer
|
|
10
12
|
from rich.console import Console
|
|
11
13
|
from rich.markup import escape
|
|
@@ -33,6 +35,10 @@ def init(
|
|
|
33
35
|
"3.11", "--python", help="Python version for the CI runner (e.g. 3.11)"
|
|
34
36
|
),
|
|
35
37
|
branch: str = typer.Option("main", "--branch", help="Branch the workflow triggers on"),
|
|
38
|
+
config: Optional[str] = typer.Option(
|
|
39
|
+
None, "--config",
|
|
40
|
+
help="Bind the ship gate to a committed soup.yaml (refuses stale evidence)",
|
|
41
|
+
),
|
|
36
42
|
output: str = typer.Option(
|
|
37
43
|
".github/workflows/soup-gate.yml", "-o", "--output", help="Workflow output path"
|
|
38
44
|
),
|
|
@@ -48,6 +54,7 @@ def init(
|
|
|
48
54
|
branch=branch,
|
|
49
55
|
output_path=output,
|
|
50
56
|
overwrite=force,
|
|
57
|
+
config_path=config,
|
|
51
58
|
)
|
|
52
59
|
except (ValueError, TypeError, OSError) as exc:
|
|
53
60
|
console.print(f"[red]{escape(str(exc))}[/]")
|