soup-cli 0.71.37__tar.gz → 0.71.38__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.37 → soup_cli-0.71.38}/CHANGELOG.md +42 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/CONTRIBUTING.md +1 -1
- {soup_cli-0.71.37 → soup_cli-0.71.38}/PKG-INFO +33 -26
- {soup_cli-0.71.37 → soup_cli-0.71.38}/README.md +32 -25
- {soup_cli-0.71.37 → soup_cli-0.71.38}/docs/commands.md +3 -2
- {soup_cli-0.71.37 → soup_cli-0.71.38}/docs/evaluation.md +22 -5
- {soup_cli-0.71.37 → soup_cli-0.71.38}/pyproject.toml +2 -1
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/ship.py +72 -64
- soup_cli-0.71.38/src/soup_cli/data/_fixtures/gate/format_json.jsonl +40 -0
- soup_cli-0.71.38/src/soup_cli/data/_fixtures/gate/safety.jsonl +40 -0
- soup_cli-0.71.38/src/soup_cli/data/_fixtures/gate/tool_call.jsonl +40 -0
- soup_cli-0.71.38/src/soup_cli/eval/forgetting.py +350 -0
- soup_cli-0.71.38/src/soup_cli/eval/gate_suites.py +234 -0
- soup_cli-0.71.38/src/soup_cli/utils/diagnose/__init__.py +57 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_part_a_wave1.py +7 -3
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_training_intelligence.py +6 -3
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07125.py +11 -9
- soup_cli-0.71.38/tests/test_v07138.py +598 -0
- soup_cli-0.71.37/src/soup_cli/eval/forgetting.py +0 -121
- soup_cli-0.71.37/src/soup_cli/utils/diagnose/__init__.py +0 -42
- {soup_cli-0.71.37 → soup_cli-0.71.38}/.dockerignore +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/.github/FUNDING.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/.github/pull_request_template.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/.gitignore +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/.mailmap +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/AGENTS.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/CODEOWNERS +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/CONTRIBUTORS.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/Dockerfile +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/LICENSE +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/NOTICE +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/SECURITY.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/docker-compose.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/docs/README.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/docs/adapters-and-governance.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/docs/backends-and-ops.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/docs/compliance.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/docs/data.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/docs/models.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/docs/peft-and-efficiency.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/docs/performance-and-quantization.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/docs/serving-and-export.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/docs/training.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/examples/README.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/examples/reward_hacking/rewards.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/soup.png +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/soup_logo_svg.svg +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/cli.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/cloud/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/cloud/modal.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/_eval_v0650.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/_eval_v07110.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/adapters.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/advise.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/card.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/ci.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/data.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/data_canary.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/data_doctor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/data_topics.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/diagnose.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/draft.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/mcp.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/ra_dit.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/serve.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/shrink.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/spectrum.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/train.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/config/schema.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/loader.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/envs/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/envs/_common.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/envs/calculator.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/envs/guess_number.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/envs/retrieval_qa.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/mcp_server/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/mcp_server/registry.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/mcp_server/server.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/recipes/catalog.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/registry/store.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/eu-ai-act.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/hipaa.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/soc2.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/sr-11-7.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/asr.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/bitnet.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/grpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/mole_routing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/online_dpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/ppo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/raft.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/sft.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/tts.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/ui/app.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_arithmetic.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_fuse.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/advise.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/agent_sandbox.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/asr_metrics.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/best_of_n.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/canary.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/ci_workflow.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/data_doctor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/data_lint.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/citation.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/live.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/draft.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/edit_kernels.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/embed.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/evolve.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/harm_probe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/hubs.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/interference_live.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/lisa.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/live_eval.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/mod.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/peft_wiring.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/prm_reward.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/probe_kernel.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/ra_dit_run.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/raft.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/rehearsal.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/reward_hack_control.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/rl_checkpoint.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/semdedup.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/ship_verdict.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/shrink.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/spectrum_scan.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/topics.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/truth_probe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/tts_codec.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/unlearn_kernels.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/templates/chat.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/templates/code.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/templates/medical.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/conftest.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/qa/v07114_qa.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_adapters.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_audio.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_autopilot.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_bco.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_bench.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_build_dag.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_callback.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_cans.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_chat.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_chat_template.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_cli.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_code_review_critical.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_code_review_deferred.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_code_review_high.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_code_review_medium_low.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_code_review_recurring.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_config.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_cost.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_curriculum.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_data.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_data_augment.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_data_sample.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_data_split.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_data_tools.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_diff.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_display.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_doctor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_embedding.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_errors.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_eval.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_export.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_formats.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_generate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_gpu.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_grpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_infer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_init.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_ipo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_kto.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_loader.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_log_level.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_merge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_migrate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_moe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_orpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_packing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_performance.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_ppo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_pretrain.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_profile.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_profiling.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_progress.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_push.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_qat.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_quant_check.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_quickstart.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_recipes.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_registry.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_relora.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_replay.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_resume.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_review_fixes_v07133.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_rlvr.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_run_cost.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_runs.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_serve.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_server_generate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_simpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_sweep.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_tracker.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_training_speed.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_tui.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_ui.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_unsloth.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0420.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0450.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0490.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0510.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0520.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0530.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v05310.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v05311.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0532.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0533.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0534.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0535.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0536.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0537.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0538.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0539.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0540.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0550.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0560.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0580.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0590.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07110.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07111.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07112.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07113.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07114.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07115.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07116.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07117.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07118.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07119.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0712.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07120.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07121.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07122.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07123.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07124.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07126.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07127.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07128.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07129.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0713.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07130.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07131.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07132.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07133.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07134.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07135.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07136.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v07137.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0714.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0715.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0716.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0717.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0718.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_v0719.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_validator.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_vision.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_warmup.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_why.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.38}/tests/test_windows_encoding.py +0 -0
|
@@ -12,6 +12,48 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.71.38] - 2026-07-17
|
|
16
|
+
|
|
17
|
+
**`soup ship`'s regression leg now has teeth.** Leg 2 (the catastrophic-forgetting
|
|
18
|
+
/ regression gate that carries the whole SHIP / DON'T-SHIP claim) was 15
|
|
19
|
+
hand-written trivia prompts scored by case-insensitive **substring** containment
|
|
20
|
+
— it scored `"B"` for "**B**erlin", `"ok"` for "lo**ok**", `"3"` for "1**3**", and
|
|
21
|
+
had **zero** items for tool-calling, safety, or JSON validity. This release makes
|
|
22
|
+
the gate real: a fixed, extraction-based scorer + bundled, offline, zero-dep eval
|
|
23
|
+
suites that catch a regression the old gate waved through.
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- **Fixed answer scorer (breaking — verdicts can change).** `soup ship`'s leg-2
|
|
28
|
+
MCQ / instruction / arithmetic answers are now scored by answer-**extraction**
|
|
29
|
+
+ a boundary-aware match, replacing the raw substring test. A spurious
|
|
30
|
+
substring inside another word ("Berlin", "look", "13") no longer scores a
|
|
31
|
+
correct answer, so an existing run's verdict may flip — intentionally, because
|
|
32
|
+
the old gate was reporting false negatives.
|
|
33
|
+
- **Bundled, offline general suite.** The default `--general-suite` is now seven
|
|
34
|
+
hand-authored suites shipped in the wheel: `mini_mmlu` / `mini_common_sense` /
|
|
35
|
+
`mini_instruction` (expanded), a new `mini_arithmetic`, and three behavioural
|
|
36
|
+
suites the old gate had no coverage for — `mini_tool_call` (function-calling),
|
|
37
|
+
`mini_format_json` (JSON validity), and `mini_safety` (refusal-rate). Each is
|
|
38
|
+
scored to a per-model absolute score by the pure scorers Soup already ships
|
|
39
|
+
(`eval/custom`, `utils/diagnose`); no lm-eval, no network, no download. Every
|
|
40
|
+
suite is large enough that a single-item flip (1/N < 0.05) trips the default
|
|
41
|
+
threshold instead of being rounded away.
|
|
42
|
+
- **`soup ship` exit codes: usage errors moved 2 → 3.** Exit `2` now means only
|
|
43
|
+
DON'T-SHIP; a typo'd flag or bad `--general-suite` exits `3` (mirroring
|
|
44
|
+
`soup plan` / `soup env check`), so CI can tell a config error from a caught
|
|
45
|
+
regression. Offline `--evidence` read/parse errors stay `1`. **Breaking** for
|
|
46
|
+
anyone parsing exit `2` as "usage error".
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
|
|
50
|
+
- `soup ship` help + docstrings no longer describe `--task-mode pairwise` as
|
|
51
|
+
"reserved for a later release" (it shipped in v0.71.31); the dead
|
|
52
|
+
`SUPPORTED_TASK_MODES` gate is removed.
|
|
53
|
+
- `soup diagnose`'s package docstring said "Six" probes (there are seven —
|
|
54
|
+
citation) and pointed live loading at an unshipped version; it now re-exports
|
|
55
|
+
all seven `score_*` probe functions so callers need not reach into submodules.
|
|
56
|
+
|
|
15
57
|
## [0.71.37] - 2026-07-17
|
|
16
58
|
|
|
17
59
|
**Every `pip install soup-cli[extra]` command now works on Windows `cmd.exe`**, and
|
|
@@ -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 (316 files, 16330 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.38
|
|
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,38 +193,45 @@ 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
|
-
|
|
209
|
-
- **
|
|
210
|
-
|
|
211
|
-
vs "Multiply two numbers" scores **higher** than a real paraphrase — so no threshold
|
|
212
|
-
separates them. The default is deliberately conservative; see the CHANGELOG.
|
|
213
|
-
- **Two blocking bugs fixed:** the hardware-fit gate **refused to train any model you merged
|
|
214
|
-
yourself** (a local checkpoint's name has no size marker, so it guessed 7B and predicted
|
|
215
|
-
16 GB), and every `pip install "soup-cli[extra]"` hint printed **without the extra** —
|
|
216
|
-
17 sites where the suggested command succeeds and leaves the feature still broken.
|
|
196
|
+
**v0.71.38 — The gate grows teeth.** `soup ship` answers the one question that matters after a fine-tune — *did my task improve WITHOUT silently breaking everything else?* This release makes the "without breaking everything else" half real.
|
|
197
|
+
|
|
198
|
+
- **A gate that actually catches regressions.** The regression leg used to be 15 trivia
|
|
199
|
+
prompts scored by raw substring — it credited `"B"` for "**B**erlin", `"3"` for "1**3**", and
|
|
200
|
+
had **zero** items for tool-calling, safety, or JSON. Now it's a fixed, extraction-based
|
|
201
|
+
scorer over seven bundled, offline suites (MCQ · arithmetic · **tool-calling** · **JSON
|
|
202
|
+
validity** · **safety/refusal**). A tune that WINS your task but quietly breaks tool-calling
|
|
203
|
+
now gets a **DON'T SHIP** — the old gate waved it through.
|
|
204
|
+
- **Zero new dependencies, no network.** Every suite ships in the wheel and is scored by the
|
|
205
|
+
pure scorers Soup already has — no lm-eval, no download. `soup ci init`'s core-only gate keeps
|
|
206
|
+
working.
|
|
207
|
+
- **Distinct exit codes for CI.** Usage errors moved off exit `2` to `3`, so `2` now means only
|
|
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`.
|
|
217
211
|
|
|
218
212
|
```bash
|
|
219
|
-
|
|
220
|
-
soup
|
|
213
|
+
# leg 1 (task win) AND leg 2 (no regression on the bundled suite) -> one verdict
|
|
214
|
+
soup ship --base ./base --adapter ./my-lora --task-eval my_task.jsonl
|
|
215
|
+
# exit 0 = SHIP · 2 = DON'T SHIP · 3 = bad flags · 1 = runtime error
|
|
221
216
|
|
|
222
|
-
soup
|
|
223
|
-
|
|
217
|
+
soup ship --evidence scores.json # offline verdict from pre-computed scores
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
<details>
|
|
221
|
+
<summary>Previous release — v0.71.36, Data Moat II (semantic dedup · topics · canaries · replay)</summary>
|
|
222
|
+
|
|
223
|
+
`soup data dedup --semantic` dedups by meaning; `soup data topics` shows a coverage table;
|
|
224
|
+
`soup data canary insert|check` proves whether a model memorized inserted secrets (exit 2 on a
|
|
225
|
+
leak); `soup train --replay old.jsonl` interleaves old data so a new task doesn't erase it.
|
|
224
226
|
|
|
227
|
+
```bash
|
|
228
|
+
soup data topics train.jsonl
|
|
229
|
+
soup data canary check --manifest secrets.json --base ./my-model # exit 2 = leak
|
|
225
230
|
soup train --config sft.yaml --replay old_task.jsonl --replay-ratio 0.1
|
|
226
231
|
```
|
|
227
232
|
|
|
233
|
+
</details>
|
|
234
|
+
|
|
228
235
|
<details>
|
|
229
236
|
<summary>Previous release — v0.71.33, <code>soup draft</code> (measure speculative decoding)</summary>
|
|
230
237
|
|
|
@@ -49,38 +49,45 @@ 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
|
-
|
|
65
|
-
- **
|
|
66
|
-
|
|
67
|
-
vs "Multiply two numbers" scores **higher** than a real paraphrase — so no threshold
|
|
68
|
-
separates them. The default is deliberately conservative; see the CHANGELOG.
|
|
69
|
-
- **Two blocking bugs fixed:** the hardware-fit gate **refused to train any model you merged
|
|
70
|
-
yourself** (a local checkpoint's name has no size marker, so it guessed 7B and predicted
|
|
71
|
-
16 GB), and every `pip install "soup-cli[extra]"` hint printed **without the extra** —
|
|
72
|
-
17 sites where the suggested command succeeds and leaves the feature still broken.
|
|
52
|
+
**v0.71.38 — The gate grows teeth.** `soup ship` answers the one question that matters after a fine-tune — *did my task improve WITHOUT silently breaking everything else?* This release makes the "without breaking everything else" half real.
|
|
53
|
+
|
|
54
|
+
- **A gate that actually catches regressions.** The regression leg used to be 15 trivia
|
|
55
|
+
prompts scored by raw substring — it credited `"B"` for "**B**erlin", `"3"` for "1**3**", and
|
|
56
|
+
had **zero** items for tool-calling, safety, or JSON. Now it's a fixed, extraction-based
|
|
57
|
+
scorer over seven bundled, offline suites (MCQ · arithmetic · **tool-calling** · **JSON
|
|
58
|
+
validity** · **safety/refusal**). A tune that WINS your task but quietly breaks tool-calling
|
|
59
|
+
now gets a **DON'T SHIP** — the old gate waved it through.
|
|
60
|
+
- **Zero new dependencies, no network.** Every suite ships in the wheel and is scored by the
|
|
61
|
+
pure scorers Soup already has — no lm-eval, no download. `soup ci init`'s core-only gate keeps
|
|
62
|
+
working.
|
|
63
|
+
- **Distinct exit codes for CI.** Usage errors moved off exit `2` to `3`, so `2` now means only
|
|
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`.
|
|
73
67
|
|
|
74
68
|
```bash
|
|
75
|
-
|
|
76
|
-
soup
|
|
69
|
+
# leg 1 (task win) AND leg 2 (no regression on the bundled suite) -> one verdict
|
|
70
|
+
soup ship --base ./base --adapter ./my-lora --task-eval my_task.jsonl
|
|
71
|
+
# exit 0 = SHIP · 2 = DON'T SHIP · 3 = bad flags · 1 = runtime error
|
|
77
72
|
|
|
78
|
-
soup
|
|
79
|
-
|
|
73
|
+
soup ship --evidence scores.json # offline verdict from pre-computed scores
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
<details>
|
|
77
|
+
<summary>Previous release — v0.71.36, Data Moat II (semantic dedup · topics · canaries · replay)</summary>
|
|
78
|
+
|
|
79
|
+
`soup data dedup --semantic` dedups by meaning; `soup data topics` shows a coverage table;
|
|
80
|
+
`soup data canary insert|check` proves whether a model memorized inserted secrets (exit 2 on a
|
|
81
|
+
leak); `soup train --replay old.jsonl` interleaves old data so a new task doesn't erase it.
|
|
80
82
|
|
|
83
|
+
```bash
|
|
84
|
+
soup data topics train.jsonl
|
|
85
|
+
soup data canary check --manifest secrets.json --base ./my-model # exit 2 = leak
|
|
81
86
|
soup train --config sft.yaml --replay old_task.jsonl --replay-ratio 0.1
|
|
82
87
|
```
|
|
83
88
|
|
|
89
|
+
</details>
|
|
90
|
+
|
|
84
91
|
<details>
|
|
85
92
|
<summary>Previous release — v0.71.33, <code>soup draft</code> (measure speculative decoding)</summary>
|
|
86
93
|
|
|
@@ -160,11 +160,12 @@ soup runs show <run_id> Run details + loss graph + cost
|
|
|
160
160
|
soup runs compare <run_1> <run_2> Compare two runs
|
|
161
161
|
soup runs replay <run_id> Replay summary + loss curve from history (also plots a benchmark-score curve when the metric lives in eval_results)
|
|
162
162
|
soup why [run_id] Explain training anomalies (heuristic)
|
|
163
|
-
soup ship --base <m> --adapter <lora> --task-eval t.jsonl SHIP / DON'T-SHIP verdict: task win AND no
|
|
163
|
+
soup ship --base <m> --adapter <lora> --task-eval t.jsonl SHIP / DON'T-SHIP verdict: task win AND no regression on the bundled suite (exit 0=SHIP / 2=DON'T / 3=usage / 1=runtime) (v0.71.25; leg-2 real + usage-off-2 v0.71.38)
|
|
164
164
|
soup ship --evidence ev.json [--output v.json] Decide offline from pre-computed scores (no model load)
|
|
165
165
|
soup ship ... --task-mode judge_score --judge-model ollama://llama3.1 Leg-1 via LLM-as-a-judge
|
|
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
|
-
soup ship ...
|
|
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
|
+
soup ship ... --general-suite mmlu,gsm8k --baseline base.json lm-eval leg-2 override + recorded base scores
|
|
168
169
|
soup card <registry-id> -o MODELCARD.md HF model card from a registry entry: training config, evals, hashes, lineage, artifacts (v0.71.35)
|
|
169
170
|
soup push --model ./out --repo you/m --card <registry-id> Upload that registry-driven card as the README (HF only) (v0.71.35)
|
|
170
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)
|
|
@@ -355,11 +355,28 @@ soup ship --evidence evidence.json --output verdict.json
|
|
|
355
355
|
}
|
|
356
356
|
```
|
|
357
357
|
|
|
358
|
-
Leg-2 defaults to the
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
358
|
+
Leg-2 defaults to the **bundled offline suite** (v0.71.38) — seven hand-authored suites shipped
|
|
359
|
+
in the wheel and scored by the pure scorers Soup already ships (no lm-eval, no network,
|
|
360
|
+
CPU-instant):
|
|
361
|
+
|
|
362
|
+
| Suite | What it checks | Scorer |
|
|
363
|
+
|-------|----------------|--------|
|
|
364
|
+
| `mini_mmlu` / `mini_common_sense` / `mini_instruction` / `mini_arithmetic` | general knowledge / reasoning / instruction-following / numeracy | answer-extraction + exact/boundary match |
|
|
365
|
+
| `mini_tool_call` | function-calling still works (right tool named) | `tool_call_name_match` |
|
|
366
|
+
| `mini_format_json` | JSON validity (a structured object, not a bare scalar) | container-only JSON check |
|
|
367
|
+
| `mini_safety` | refusal-rate on harmful prompts (under-refusal = regression) | refusal heuristic |
|
|
368
|
+
|
|
369
|
+
Each suite is >20 items so a single-item flip (1/N < 0.05) trips the default threshold instead
|
|
370
|
+
of being rounded away. The scorer is answer-**extraction** — a spurious substring inside a word
|
|
371
|
+
(`"B"` in "**B**erlin") no longer scores, which is a **breaking** change from the v0.25.0
|
|
372
|
+
substring scorer (an existing run's verdict can flip; recompute any committed `--baseline`).
|
|
373
|
+
`--general-suite <names>` with any non-bundled name routes through the lm-eval harness. Pairwise
|
|
374
|
+
judge win-rate (`--task-mode pairwise`) shipped in v0.71.31.
|
|
375
|
+
|
|
376
|
+
Exit codes (v0.71.38): **0 = SHIP · 2 = DON'T SHIP · 3 = usage/flag error · 1 = runtime error**
|
|
377
|
+
— usage errors moved off `2` so CI can tell a config typo from a caught regression. The engine
|
|
378
|
+
lives in `soup_cli.utils.ship_verdict` (`decide_ship` is a pure function — the whole truth table
|
|
379
|
+
is CPU-testable); the bundled suites live in `soup_cli.eval.gate_suites`.
|
|
363
380
|
|
|
364
381
|
|
|
365
382
|
## NLG Evaluation Metrics (BLEU + ROUGE)
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "soup-cli"
|
|
7
|
-
version = "0.71.
|
|
7
|
+
version = "0.71.38"
|
|
8
8
|
description = "Fine-tune and post-train LLMs in one command. No SSH, no config hell."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
@@ -127,6 +127,7 @@ artifacts = [
|
|
|
127
127
|
"src/soup_cli/data/_fixtures/*.jsonl",
|
|
128
128
|
"src/soup_cli/data/_fixtures/unlearning/*.jsonl",
|
|
129
129
|
"src/soup_cli/data/_fixtures/behavior/*.jsonl",
|
|
130
|
+
"src/soup_cli/data/_fixtures/gate/*.jsonl",
|
|
130
131
|
]
|
|
131
132
|
|
|
132
133
|
[tool.ruff]
|
|
@@ -11,14 +11,19 @@ break it? The decision fuses two legs (task win + catastrophic-forgetting
|
|
|
11
11
|
guard) into a single binary verdict — see ``utils/ship_verdict.py`` for the
|
|
12
12
|
moat (``decide_ship``).
|
|
13
13
|
|
|
14
|
-
Exit codes
|
|
15
|
-
**0 = SHIP, 2 = DON'T SHIP, 1 = runtime error**.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
Exit codes so CI can gate on the result:
|
|
15
|
+
**0 = SHIP, 2 = DON'T SHIP, 3 = usage/validation error, 1 = runtime error**.
|
|
16
|
+
Usage errors moved off ``2`` in v0.71.38 — a typo'd flag was previously
|
|
17
|
+
indistinguishable from a caught regression (both exited ``2``); ``3`` mirrors
|
|
18
|
+
``soup plan`` / ``soup env check``. Offline ``--evidence`` read/parse errors
|
|
19
|
+
stay ``1``.
|
|
20
|
+
|
|
21
|
+
Leg 1 (task win) modes: ``metric`` (reuses ``eval/custom.run_eval`` accuracy),
|
|
22
|
+
``judge_score`` (reuses ``eval/judge.JudgeEvaluator``), and ``pairwise`` (true
|
|
23
|
+
judge win-rate, v0.71.31). Leg 2 (general suite) defaults to the bundled offline
|
|
24
|
+
suite (``eval/gate_suites`` — MCQ/arithmetic + tool-call/JSON/safety, scored by
|
|
25
|
+
the pure diagnose/custom scorers, v0.71.38); ``--general-suite`` with any
|
|
26
|
+
non-bundled name routes through the existing lm-eval runner.
|
|
22
27
|
"""
|
|
23
28
|
|
|
24
29
|
from __future__ import annotations
|
|
@@ -50,6 +55,11 @@ console = Console()
|
|
|
50
55
|
|
|
51
56
|
app = typer.Typer(no_args_is_help=False)
|
|
52
57
|
|
|
58
|
+
# Exit-code taxonomy (v0.71.38): keep DON'T-SHIP distinct from a config typo.
|
|
59
|
+
_EXIT_RUNTIME = 1 # something went wrong actually running (IO, model load, ...)
|
|
60
|
+
_EXIT_DONT_SHIP = 2 # a verdict: leg 1 or leg 2 said don't ship
|
|
61
|
+
_EXIT_USAGE = 3 # bad flags / validation (mirrors `soup plan` / `env check`)
|
|
62
|
+
|
|
53
63
|
# 16 MiB cap on evidence JSON (mirrors `soup diagnose` — prevents a
|
|
54
64
|
# multi-GB / symlink-pointed file from OOMing at json.load time).
|
|
55
65
|
_MAX_EVIDENCE_BYTES = 16 * 1024 * 1024
|
|
@@ -74,29 +84,26 @@ def _fail(message: str, code: int) -> NoReturn:
|
|
|
74
84
|
|
|
75
85
|
|
|
76
86
|
def _validate_threshold_flag(value: float) -> float:
|
|
77
|
-
# Fast-fail a bad flag with
|
|
87
|
+
# Fast-fail a bad flag with a usage error (exit 3) here; the engine's own
|
|
78
88
|
# _validate_threshold raises ValueError (-> exit 1 runtime), which is the
|
|
79
89
|
# wrong exit code for a CLI typo. Intentional, narrow duplication.
|
|
80
90
|
if not isinstance(value, (int, float)) or isinstance(value, bool):
|
|
81
|
-
_fail("--forgetting-threshold must be a number",
|
|
91
|
+
_fail("--forgetting-threshold must be a number", _EXIT_USAGE)
|
|
82
92
|
fvalue = float(value)
|
|
83
93
|
# NaN fails both comparisons -> rejected.
|
|
84
94
|
if not (0.0 <= fvalue <= 1.0):
|
|
85
|
-
_fail("--forgetting-threshold must be in [0.0, 1.0]",
|
|
95
|
+
_fail("--forgetting-threshold must be in [0.0, 1.0]", _EXIT_USAGE)
|
|
86
96
|
return fvalue
|
|
87
97
|
|
|
88
98
|
|
|
89
99
|
def _validate_task_mode_flag(task_mode: str) -> None:
|
|
100
|
+
# All three modes (metric / judge_score / pairwise) ship as of v0.71.31, so
|
|
101
|
+
# SUPPORTED_TASK_MODES == TASK_MODES and the old "pairwise reserved" gate is
|
|
102
|
+
# gone (it was dead code).
|
|
90
103
|
if task_mode not in TASK_MODES:
|
|
91
104
|
_fail(
|
|
92
105
|
f"--task-mode must be one of {', '.join(TASK_MODES)}; got {task_mode!r}",
|
|
93
|
-
|
|
94
|
-
)
|
|
95
|
-
if task_mode not in SUPPORTED_TASK_MODES:
|
|
96
|
-
_fail(
|
|
97
|
-
f"--task-mode {task_mode!r} (pairwise judge win-rate) ships in a "
|
|
98
|
-
"later release; use 'metric' or 'judge_score' for now",
|
|
99
|
-
2,
|
|
106
|
+
_EXIT_USAGE,
|
|
100
107
|
)
|
|
101
108
|
|
|
102
109
|
|
|
@@ -116,7 +123,7 @@ def _validate_judge_model_url(url: str) -> None:
|
|
|
116
123
|
_fail(
|
|
117
124
|
f"--judge-model {url!r} uses a disallowed scheme/host; "
|
|
118
125
|
"use ollama://, https://, or http://localhost",
|
|
119
|
-
|
|
126
|
+
_EXIT_USAGE,
|
|
120
127
|
)
|
|
121
128
|
|
|
122
129
|
|
|
@@ -165,33 +172,33 @@ def _verdict_from_evidence(path: str, *, forgetting_threshold: float) -> ShipVer
|
|
|
165
172
|
try:
|
|
166
173
|
payload = _load_evidence(path)
|
|
167
174
|
except (OSError, ValueError, json.JSONDecodeError) as exc:
|
|
168
|
-
_fail(f"cannot read --evidence: {exc}",
|
|
175
|
+
_fail(f"cannot read --evidence: {exc}", _EXIT_RUNTIME)
|
|
169
176
|
|
|
170
177
|
task = payload.get("task")
|
|
171
178
|
if not isinstance(task, dict):
|
|
172
|
-
_fail("evidence.task must be an object with 'mode', 'base', 'tuned'",
|
|
179
|
+
_fail("evidence.task must be an object with 'mode', 'base', 'tuned'", _EXIT_RUNTIME)
|
|
173
180
|
mode = task.get("mode", "metric")
|
|
174
181
|
if mode not in SUPPORTED_TASK_MODES:
|
|
175
182
|
_fail(
|
|
176
183
|
f"evidence.task.mode must be one of {', '.join(SUPPORTED_TASK_MODES)}; "
|
|
177
184
|
f"got {mode!r}",
|
|
178
|
-
|
|
185
|
+
_EXIT_RUNTIME,
|
|
179
186
|
)
|
|
180
187
|
if "base" not in task or "tuned" not in task:
|
|
181
|
-
_fail("evidence.task needs both 'base' and 'tuned' scores",
|
|
188
|
+
_fail("evidence.task needs both 'base' and 'tuned' scores", _EXIT_RUNTIME)
|
|
182
189
|
try:
|
|
183
190
|
task_win = build_task_win(mode, task["base"], task["tuned"])
|
|
184
191
|
except (TypeError, ValueError) as exc:
|
|
185
|
-
_fail(f"invalid evidence.task: {exc}",
|
|
192
|
+
_fail(f"invalid evidence.task: {exc}", _EXIT_RUNTIME)
|
|
186
193
|
|
|
187
194
|
raw_benchmarks = payload.get("benchmarks", {})
|
|
188
195
|
if not isinstance(raw_benchmarks, dict):
|
|
189
|
-
_fail("evidence.benchmarks must be an object of {name: {base, tuned}}",
|
|
196
|
+
_fail("evidence.benchmarks must be an object of {name: {base, tuned}}", _EXIT_RUNTIME)
|
|
190
197
|
base_scores: Dict[str, object] = {}
|
|
191
198
|
tuned_scores: Dict[str, object] = {}
|
|
192
199
|
for name, entry in raw_benchmarks.items():
|
|
193
200
|
if not isinstance(entry, dict) or "base" not in entry or "tuned" not in entry:
|
|
194
|
-
_fail(f"evidence.benchmarks[{name!r}] needs 'base' and 'tuned'",
|
|
201
|
+
_fail(f"evidence.benchmarks[{name!r}] needs 'base' and 'tuned'", _EXIT_RUNTIME)
|
|
195
202
|
base_scores[str(name)] = entry["base"]
|
|
196
203
|
tuned_scores[str(name)] = entry["tuned"]
|
|
197
204
|
|
|
@@ -201,7 +208,7 @@ def _verdict_from_evidence(path: str, *, forgetting_threshold: float) -> ShipVer
|
|
|
201
208
|
)
|
|
202
209
|
return decide_ship(task_win, deltas, forgetting_threshold=forgetting_threshold)
|
|
203
210
|
except (TypeError, ValueError) as exc:
|
|
204
|
-
_fail(f"invalid evidence.benchmarks: {exc}",
|
|
211
|
+
_fail(f"invalid evidence.benchmarks: {exc}", _EXIT_RUNTIME)
|
|
205
212
|
|
|
206
213
|
|
|
207
214
|
# ---------------------------------------------------------------------------
|
|
@@ -312,12 +319,6 @@ def _leg1_pairwise(
|
|
|
312
319
|
return build_task_win("pairwise", 0.5, winrate)
|
|
313
320
|
|
|
314
321
|
|
|
315
|
-
def _mini_score(gen: Callable[[str], str], benchmark: str) -> float:
|
|
316
|
-
from soup_cli.eval.forgetting import ForgettingDetector
|
|
317
|
-
|
|
318
|
-
return ForgettingDetector(generate_fn=gen, benchmark=benchmark).run_baseline()
|
|
319
|
-
|
|
320
|
-
|
|
321
322
|
def _extract_lm_score(bench_data: Mapping[str, object]) -> Optional[float]:
|
|
322
323
|
"""Pull a single accuracy metric from an lm-eval per-task result block."""
|
|
323
324
|
for key in ("acc,none", "acc_norm,none", "exact_match,none", "em,none"):
|
|
@@ -399,24 +400,26 @@ def _leg2_scores(
|
|
|
399
400
|
) -> Tuple[Dict[str, object], Dict[str, object]]:
|
|
400
401
|
"""Compute leg-2 ``(base_scores, tuned_scores)`` maps over the general suite.
|
|
401
402
|
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
403
|
+
Bundled suite names (v0.71.38 — the MCQ/arithmetic *and* the behavioural
|
|
404
|
+
tool-call / JSON-format / safety suites) are scored offline via
|
|
405
|
+
``gate_suites.score_bundled_suite``; any other name routes through the
|
|
406
|
+
lm-eval override. ``baseline_scores`` supplies base scores directly
|
|
407
|
+
(skipping the base run) for any name it covers.
|
|
405
408
|
"""
|
|
406
|
-
from soup_cli.eval.
|
|
409
|
+
from soup_cli.eval.gate_suites import is_bundled_suite, score_bundled_suite
|
|
407
410
|
|
|
408
|
-
|
|
409
|
-
other_names = [n for n in suite_names if
|
|
411
|
+
bundled_names = [n for n in suite_names if is_bundled_suite(n)]
|
|
412
|
+
other_names = [n for n in suite_names if not is_bundled_suite(n)]
|
|
410
413
|
|
|
411
414
|
base_map: Dict[str, object] = {}
|
|
412
415
|
tuned_map: Dict[str, object] = {}
|
|
413
416
|
|
|
414
|
-
for name in
|
|
415
|
-
tuned_map[name] =
|
|
417
|
+
for name in bundled_names:
|
|
418
|
+
tuned_map[name] = score_bundled_suite(name, tuned_gen)
|
|
416
419
|
if name in baseline_scores:
|
|
417
420
|
base_map[name] = float(baseline_scores[name])
|
|
418
421
|
else:
|
|
419
|
-
base_map[name] =
|
|
422
|
+
base_map[name] = score_bundled_suite(name, base_gen)
|
|
420
423
|
|
|
421
424
|
if other_names:
|
|
422
425
|
lm_base, lm_tuned = _lm_eval_leg2(
|
|
@@ -439,10 +442,10 @@ def _leg2_scores(
|
|
|
439
442
|
|
|
440
443
|
|
|
441
444
|
def _parse_suite(general_suite: Optional[str]) -> List[str]:
|
|
442
|
-
from soup_cli.eval.
|
|
445
|
+
from soup_cli.eval.gate_suites import DEFAULT_GENERAL_SUITE
|
|
443
446
|
|
|
444
447
|
if not general_suite:
|
|
445
|
-
return list(
|
|
448
|
+
return list(DEFAULT_GENERAL_SUITE)
|
|
446
449
|
names = [chunk.strip() for chunk in general_suite.split(",")]
|
|
447
450
|
return [name for name in names if name]
|
|
448
451
|
|
|
@@ -462,32 +465,32 @@ def _verdict_live(
|
|
|
462
465
|
) -> ShipVerdict:
|
|
463
466
|
"""Run a live verdict — validate flags (exit 2), then evaluate (exit 1)."""
|
|
464
467
|
if not base:
|
|
465
|
-
_fail("live run needs --base <model>",
|
|
468
|
+
_fail("live run needs --base <model>", _EXIT_USAGE)
|
|
466
469
|
if adapter and tuned:
|
|
467
|
-
_fail("pass --adapter OR --tuned, not both",
|
|
470
|
+
_fail("pass --adapter OR --tuned, not both", _EXIT_USAGE)
|
|
468
471
|
if not adapter and not tuned:
|
|
469
|
-
_fail("live run needs --tuned <model> or --adapter <adapter-path>",
|
|
472
|
+
_fail("live run needs --tuned <model> or --adapter <adapter-path>", _EXIT_USAGE)
|
|
470
473
|
if not task_eval:
|
|
471
|
-
_fail("live run needs --task-eval <tasks.jsonl> for the leg-1 task win",
|
|
474
|
+
_fail("live run needs --task-eval <tasks.jsonl> for the leg-1 task win", _EXIT_USAGE)
|
|
472
475
|
try:
|
|
473
476
|
enforce_under_cwd_and_no_symlink(task_eval, "--task-eval path")
|
|
474
477
|
except (ValueError, TypeError) as exc:
|
|
475
|
-
_fail(str(exc),
|
|
478
|
+
_fail(str(exc), _EXIT_USAGE)
|
|
476
479
|
|
|
477
480
|
suite_names = _parse_suite(general_suite)
|
|
478
481
|
if not suite_names:
|
|
479
|
-
_fail("--general-suite resolved to no benchmarks",
|
|
482
|
+
_fail("--general-suite resolved to no benchmarks", _EXIT_USAGE)
|
|
480
483
|
if len(suite_names) > _MAX_SUITE_BENCHMARKS:
|
|
481
484
|
_fail(
|
|
482
485
|
f"--general-suite has too many benchmarks (max {_MAX_SUITE_BENCHMARKS})",
|
|
483
|
-
|
|
486
|
+
_EXIT_USAGE,
|
|
484
487
|
)
|
|
485
488
|
for _name in suite_names:
|
|
486
489
|
if "\x00" in _name or len(_name) > _MAX_BENCHMARK_NAME_CHARS:
|
|
487
490
|
_fail(
|
|
488
491
|
"--general-suite names must be null-free and "
|
|
489
492
|
f"< {_MAX_BENCHMARK_NAME_CHARS} chars",
|
|
490
|
-
|
|
493
|
+
_EXIT_USAGE,
|
|
491
494
|
)
|
|
492
495
|
|
|
493
496
|
# Resolve --baseline up front so a bad spec (outside cwd / missing file /
|
|
@@ -499,19 +502,19 @@ def _verdict_live(
|
|
|
499
502
|
try:
|
|
500
503
|
baseline_scores = resolve_baseline(baseline_spec)
|
|
501
504
|
except (ValueError, FileNotFoundError, OSError) as exc:
|
|
502
|
-
_fail(f"--baseline: {exc}",
|
|
505
|
+
_fail(f"--baseline: {exc}", _EXIT_USAGE)
|
|
503
506
|
|
|
504
507
|
tuned_id = tuned if tuned else base
|
|
505
508
|
try:
|
|
506
509
|
base_gen, tuned_gen = _resolve_generators(base, tuned, adapter, device)
|
|
507
510
|
if task_mode == "judge_score":
|
|
508
511
|
if not judge_model:
|
|
509
|
-
_fail("--task-mode judge_score needs --judge-model <url>",
|
|
512
|
+
_fail("--task-mode judge_score needs --judge-model <url>", _EXIT_USAGE)
|
|
510
513
|
_validate_judge_model_url(judge_model)
|
|
511
514
|
task_win = _leg1_judge(base_gen, tuned_gen, task_eval, judge_model)
|
|
512
515
|
elif task_mode == "pairwise":
|
|
513
516
|
if not judge_model:
|
|
514
|
-
_fail("--task-mode pairwise needs --judge-model <url>",
|
|
517
|
+
_fail("--task-mode pairwise needs --judge-model <url>", _EXIT_USAGE)
|
|
515
518
|
_validate_judge_model_url(judge_model)
|
|
516
519
|
task_win = _leg1_pairwise(base_gen, tuned_gen, task_eval, judge_model)
|
|
517
520
|
else:
|
|
@@ -532,10 +535,10 @@ def _verdict_live(
|
|
|
532
535
|
return decide_ship(task_win, deltas, forgetting_threshold=forgetting_threshold)
|
|
533
536
|
except typer.Exit:
|
|
534
537
|
# typer.Exit subclasses RuntimeError — re-raise so in-try _fail() usage
|
|
535
|
-
# errors (exit
|
|
538
|
+
# errors (exit 3) keep their code instead of being re-coded as exit 1.
|
|
536
539
|
raise
|
|
537
540
|
except (ValueError, TypeError, OSError, RuntimeError, ImportError) as exc:
|
|
538
|
-
_fail(f"live ship verdict failed: {type(exc).__name__}: {exc}",
|
|
541
|
+
_fail(f"live ship verdict failed: {type(exc).__name__}: {exc}", _EXIT_RUNTIME)
|
|
539
542
|
|
|
540
543
|
|
|
541
544
|
# ---------------------------------------------------------------------------
|
|
@@ -551,9 +554,9 @@ def _emit_and_exit(verdict: ShipVerdict, output: Optional[str]) -> None:
|
|
|
551
554
|
)
|
|
552
555
|
console.print(f"[green]Wrote[/] {escape(output)}")
|
|
553
556
|
except (OSError, ValueError, TypeError) as exc:
|
|
554
|
-
_fail(f"cannot write --output: {type(exc).__name__}: {exc}",
|
|
557
|
+
_fail(f"cannot write --output: {type(exc).__name__}: {exc}", _EXIT_RUNTIME)
|
|
555
558
|
if verdict.decision != DECISION_SHIP:
|
|
556
|
-
raise typer.Exit(code=
|
|
559
|
+
raise typer.Exit(code=_EXIT_DONT_SHIP)
|
|
557
560
|
|
|
558
561
|
|
|
559
562
|
# ---------------------------------------------------------------------------
|
|
@@ -580,18 +583,23 @@ def ship(
|
|
|
580
583
|
help="Leg-1 mode: metric | judge_score | pairwise (judge win-rate).",
|
|
581
584
|
),
|
|
582
585
|
judge_model: Optional[str] = typer.Option(
|
|
583
|
-
None,
|
|
586
|
+
None,
|
|
587
|
+
"--judge-model",
|
|
588
|
+
help="Judge model URL for --task-mode judge_score or pairwise.",
|
|
584
589
|
),
|
|
585
590
|
general_suite: Optional[str] = typer.Option(
|
|
586
591
|
None,
|
|
587
592
|
"--general-suite",
|
|
588
|
-
help="Comma list of leg-2 benchmarks (default: the
|
|
589
|
-
"non-
|
|
593
|
+
help="Comma list of leg-2 benchmarks (default: the bundled offline suite "
|
|
594
|
+
"— MCQ/arithmetic + tool-call/JSON/safety; non-bundled names route "
|
|
595
|
+
"through lm-eval).",
|
|
590
596
|
),
|
|
591
597
|
baseline: Optional[str] = typer.Option(
|
|
592
598
|
None,
|
|
593
599
|
"--baseline",
|
|
594
|
-
help="registry://<id> or JSON file of base leg-2 scores (skips base run)."
|
|
600
|
+
help="registry://<id> or JSON file of base leg-2 scores (skips base run). "
|
|
601
|
+
"Recompute baselines captured before v0.71.38 — the leg-2 scorer changed, "
|
|
602
|
+
"so an old baseline is not comparable to a freshly-scored tuned model.",
|
|
595
603
|
),
|
|
596
604
|
forgetting_threshold: float = typer.Option(
|
|
597
605
|
DEFAULT_FORGETTING_THRESHOLD,
|
|
@@ -631,7 +639,7 @@ def ship(
|
|
|
631
639
|
_fail(
|
|
632
640
|
"provide --evidence <json> for an offline verdict, or "
|
|
633
641
|
"--base + (--tuned|--adapter) + --task-eval for a live run",
|
|
634
|
-
|
|
642
|
+
_EXIT_USAGE,
|
|
635
643
|
)
|
|
636
644
|
|
|
637
645
|
_emit_and_exit(verdict, output)
|