soup-cli 0.71.37__tar.gz → 0.71.39__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.39}/CHANGELOG.md +89 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/CONTRIBUTING.md +1 -1
- {soup_cli-0.71.37 → soup_cli-0.71.39}/PKG-INFO +32 -27
- {soup_cli-0.71.37 → soup_cli-0.71.39}/README.md +31 -26
- {soup_cli-0.71.37 → soup_cli-0.71.39}/docs/commands.md +7 -3
- {soup_cli-0.71.37 → soup_cli-0.71.39}/docs/evaluation.md +52 -5
- {soup_cli-0.71.37 → soup_cli-0.71.39}/pyproject.toml +2 -1
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/ci.py +7 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/ship.py +394 -85
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/config/schema.py +41 -0
- soup_cli-0.71.39/src/soup_cli/data/_fixtures/gate/format_json.jsonl +40 -0
- soup_cli-0.71.39/src/soup_cli/data/_fixtures/gate/safety.jsonl +40 -0
- soup_cli-0.71.39/src/soup_cli/data/_fixtures/gate/tool_call.jsonl +40 -0
- soup_cli-0.71.39/src/soup_cli/eval/forgetting.py +350 -0
- soup_cli-0.71.39/src/soup_cli/eval/gate_suites.py +234 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/ci_workflow.py +42 -4
- soup_cli-0.71.39/src/soup_cli/utils/diagnose/__init__.py +57 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/ship_verdict.py +78 -1
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_part_a_wave1.py +7 -3
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_training_intelligence.py +6 -3
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07125.py +11 -9
- soup_cli-0.71.39/tests/test_v07138.py +598 -0
- soup_cli-0.71.39/tests/test_v07139.py +802 -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.39}/.dockerignore +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/.github/FUNDING.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/.github/pull_request_template.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/.gitignore +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/.mailmap +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/AGENTS.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/CODEOWNERS +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/CONTRIBUTORS.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/Dockerfile +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/LICENSE +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/NOTICE +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/SECURITY.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/docker-compose.yml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/docs/README.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/docs/adapters-and-governance.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/docs/backends-and-ops.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/docs/compliance.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/docs/data.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/docs/models.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/docs/peft-and-efficiency.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/docs/performance-and-quantization.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/docs/serving-and-export.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/docs/training.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/examples/README.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/examples/reward_hacking/rewards.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/soup.png +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/soup_logo_svg.svg +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/cli.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/cloud/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/cloud/modal.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/_eval_v0650.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/_eval_v07110.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/adapters.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/advise.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/card.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/data.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/data_canary.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/data_doctor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/data_topics.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/diagnose.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/draft.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/mcp.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/ra_dit.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/serve.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/shrink.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/spectrum.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/train.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/loader.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/envs/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/envs/_common.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/envs/calculator.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/envs/guess_number.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/envs/retrieval_qa.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/mcp_server/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/mcp_server/registry.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/mcp_server/server.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/recipes/catalog.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/registry/store.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/eu-ai-act.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/hipaa.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/soc2.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/sr-11-7.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/asr.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/bitnet.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/grpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/mole_routing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/online_dpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/ppo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/raft.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/sft.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/tts.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/ui/app.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_arithmetic.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_fuse.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/advise.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/agent_sandbox.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/asr_metrics.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/best_of_n.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/canary.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/data_doctor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/data_lint.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/citation.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/live.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/draft.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/edit_kernels.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/embed.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/evolve.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/harm_probe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/hubs.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/interference_live.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/lisa.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/live_eval.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/mod.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/peft_wiring.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/prm_reward.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/probe_kernel.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/ra_dit_run.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/raft.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/rehearsal.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/reward_hack_control.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/rl_checkpoint.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/semdedup.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/shrink.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/spectrum_scan.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/topics.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/truth_probe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/tts_codec.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/unlearn_kernels.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/templates/chat.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/templates/code.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/templates/medical.yaml +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/__init__.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/conftest.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/qa/v07114_qa.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_adapters.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_audio.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_autopilot.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_bco.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_bench.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_build_dag.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_callback.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_cans.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_chat.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_chat_template.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_cli.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_code_review_critical.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_code_review_deferred.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_code_review_high.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_code_review_medium_low.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_code_review_recurring.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_config.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_cost.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_curriculum.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_data.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_data_augment.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_data_sample.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_data_split.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_data_tools.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_diff.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_display.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_doctor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_embedding.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_errors.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_eval.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_export.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_formats.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_generate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_gpu.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_grpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_infer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_init.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_ipo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_kto.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_loader.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_log_level.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_merge.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_migrate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_moe.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_orpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_packing.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_performance.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_ppo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_pretrain.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_profile.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_profiling.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_progress.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_push.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_qat.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_quant_check.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_quickstart.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_recipes.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_registry.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_relora.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_replay.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_resume.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_review_fixes_v07133.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_rlvr.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_run_cost.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_runs.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_serve.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_server_generate.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_simpo.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_sweep.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_tracker.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_training_speed.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_tui.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_ui.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_unsloth.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0420.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0450.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0490.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0510.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0520.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0530.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v05310.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v05311.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0532.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0533.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0534.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0535.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0536.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0537.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0538.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0539.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0540.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0550.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0560.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0580.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0590.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07110.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07111.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07112.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07113.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07114.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07115.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07116.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07117.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07118.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07119.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0712.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07120.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07121.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07122.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07123.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07124.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07126.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07127.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07128.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07129.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0713.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07130.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07131.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07132.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07133.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07134.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07135.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07136.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v07137.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0714.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0715.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0716.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0717.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0718.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_v0719.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_validator.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_vision.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_warmup.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_why.py +0 -0
- {soup_cli-0.71.37 → soup_cli-0.71.39}/tests/test_windows_encoding.py +0 -0
|
@@ -12,6 +12,95 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.71.39] - 2026-07-19
|
|
16
|
+
|
|
17
|
+
**"CI for weights, not prompts": close the evidence loop.** `soup ship`'s verdict is
|
|
18
|
+
now something Soup can emit, commit, review, and bind to the exact model that
|
|
19
|
+
produced it — turning the `soup ci init` gate from "edit two numbers in a JSON file"
|
|
20
|
+
into a reproducible, provenance-bound check that renders on every PR.
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- **`soup ship --emit-evidence <path>`** — re-serialises the verdict into the
|
|
25
|
+
`--evidence` INPUT schema, so a run's output is replayable as input: feeding it
|
|
26
|
+
back through `--evidence` (same `--forgetting-threshold`) reproduces an identical
|
|
27
|
+
verdict. Output is finally input.
|
|
28
|
+
- **`ShipConfig` under `eval.ship` in `soup.yaml` + `soup ship --config soup.yaml`** —
|
|
29
|
+
commit the gate policy (`task_eval` / `task_mode` / `general_suite` /
|
|
30
|
+
`forgetting_threshold` / `judge_model` / `baseline`) so the verdict is reviewable in
|
|
31
|
+
a PR diff and reproducible. An explicit CLI flag always wins (CLI > config > default).
|
|
32
|
+
- **`soup ship --push owner/repo#N`** — post the verdict as a GitHub PR comment
|
|
33
|
+
(reuses the `soup adapters pr --push` `gh api` plumbing). Best-effort: a missing
|
|
34
|
+
token / `gh` failure warns but never flips the SHIP / DON'T-SHIP exit code.
|
|
35
|
+
- **Evidence provenance + staleness gate.** With `--emit-evidence`, `--config` STAMPS
|
|
36
|
+
a `provenance` block (`config_sha` — a semantic, order-insensitive recipe hash — plus
|
|
37
|
+
`base_model` and a best-effort `data_sha`) onto the evidence. With `--evidence`
|
|
38
|
+
alone, `--config` GATES: it refuses (exit 3) evidence whose `config_sha` drifted
|
|
39
|
+
from the committed config, so a PR that changed `soup.yaml` but forgot to recompute
|
|
40
|
+
its evidence is caught. The gate policy (`eval.ship`) is EXCLUDED from the hash, so
|
|
41
|
+
tuning `forgetting_threshold` never falsely invalidates evidence about an unchanged
|
|
42
|
+
model.
|
|
43
|
+
- **`soup ci init --config <soup.yaml>`** — binds the generated gate's `soup ship`
|
|
44
|
+
step to the committed config (provenance/staleness enforcement in CI).
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
|
|
48
|
+
- **Exit-code note:** `soup ship --config` usage / staleness errors are exit `3`
|
|
49
|
+
(usage), preserving `0 = SHIP`, `2 = DON'T SHIP`, `1 = runtime` from v0.71.38.
|
|
50
|
+
|
|
51
|
+
### Security
|
|
52
|
+
|
|
53
|
+
- `provenance.config_sha` read from untrusted evidence is shape-validated as a hex
|
|
54
|
+
digest before being echoed (a raw value could smuggle terminal ESC bytes past
|
|
55
|
+
`rich.markup.escape`).
|
|
56
|
+
- `provenance.data_sha` hashes the training file through an `O_NOFOLLOW` fd with a
|
|
57
|
+
symlink-rejecting containment check and an 8 GiB cap (was an unguarded `hash_file`).
|
|
58
|
+
- `soup ci init`'s path validation now rejects `#` and the YAML 1.1 line breaks
|
|
59
|
+
(NEL / LS / PS), closing a plain-scalar comment-truncation of the generated `run:`
|
|
60
|
+
step (also hardens the pre-existing `--data` / `--suite` / `--evidence` args).
|
|
61
|
+
|
|
62
|
+
## [0.71.38] - 2026-07-17
|
|
63
|
+
|
|
64
|
+
**`soup ship`'s regression leg now has teeth.** Leg 2 (the catastrophic-forgetting
|
|
65
|
+
/ regression gate that carries the whole SHIP / DON'T-SHIP claim) was 15
|
|
66
|
+
hand-written trivia prompts scored by case-insensitive **substring** containment
|
|
67
|
+
— it scored `"B"` for "**B**erlin", `"ok"` for "lo**ok**", `"3"` for "1**3**", and
|
|
68
|
+
had **zero** items for tool-calling, safety, or JSON validity. This release makes
|
|
69
|
+
the gate real: a fixed, extraction-based scorer + bundled, offline, zero-dep eval
|
|
70
|
+
suites that catch a regression the old gate waved through.
|
|
71
|
+
|
|
72
|
+
### Changed
|
|
73
|
+
|
|
74
|
+
- **Fixed answer scorer (breaking — verdicts can change).** `soup ship`'s leg-2
|
|
75
|
+
MCQ / instruction / arithmetic answers are now scored by answer-**extraction**
|
|
76
|
+
+ a boundary-aware match, replacing the raw substring test. A spurious
|
|
77
|
+
substring inside another word ("Berlin", "look", "13") no longer scores a
|
|
78
|
+
correct answer, so an existing run's verdict may flip — intentionally, because
|
|
79
|
+
the old gate was reporting false negatives.
|
|
80
|
+
- **Bundled, offline general suite.** The default `--general-suite` is now seven
|
|
81
|
+
hand-authored suites shipped in the wheel: `mini_mmlu` / `mini_common_sense` /
|
|
82
|
+
`mini_instruction` (expanded), a new `mini_arithmetic`, and three behavioural
|
|
83
|
+
suites the old gate had no coverage for — `mini_tool_call` (function-calling),
|
|
84
|
+
`mini_format_json` (JSON validity), and `mini_safety` (refusal-rate). Each is
|
|
85
|
+
scored to a per-model absolute score by the pure scorers Soup already ships
|
|
86
|
+
(`eval/custom`, `utils/diagnose`); no lm-eval, no network, no download. Every
|
|
87
|
+
suite is large enough that a single-item flip (1/N < 0.05) trips the default
|
|
88
|
+
threshold instead of being rounded away.
|
|
89
|
+
- **`soup ship` exit codes: usage errors moved 2 → 3.** Exit `2` now means only
|
|
90
|
+
DON'T-SHIP; a typo'd flag or bad `--general-suite` exits `3` (mirroring
|
|
91
|
+
`soup plan` / `soup env check`), so CI can tell a config error from a caught
|
|
92
|
+
regression. Offline `--evidence` read/parse errors stay `1`. **Breaking** for
|
|
93
|
+
anyone parsing exit `2` as "usage error".
|
|
94
|
+
|
|
95
|
+
### Fixed
|
|
96
|
+
|
|
97
|
+
- `soup ship` help + docstrings no longer describe `--task-mode pairwise` as
|
|
98
|
+
"reserved for a later release" (it shipped in v0.71.31); the dead
|
|
99
|
+
`SUPPORTED_TASK_MODES` gate is removed.
|
|
100
|
+
- `soup diagnose`'s package docstring said "Six" probes (there are seven —
|
|
101
|
+
citation) and pointed live loading at an unshipped version; it now re-exports
|
|
102
|
+
all seven `score_*` probe functions so callers need not reach into submodules.
|
|
103
|
+
|
|
15
104
|
## [0.71.37] - 2026-07-17
|
|
16
105
|
|
|
17
106
|
**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 (317 files, 16387 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.39
|
|
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,43 @@ 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
|
-
- **Honest result:** semantic dedup is **not** a paraphrase detector. Measured, paraphrase
|
|
210
|
-
cosines (0.49–0.76) *overlap* with genuinely-distinct rows (0.54–0.76) — "Add two numbers"
|
|
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.39 — CI for weights, not prompts.** `soup ship`'s verdict is now something Soup can emit, commit, review, and bind to the exact model that produced it — so a fine-tuning gate renders on every PR instead of asking you to hand-edit a JSON file.
|
|
197
|
+
|
|
198
|
+
- **Output is finally input.** `soup ship --emit-evidence ev.json` writes the scores in the
|
|
199
|
+
`--evidence` schema, so a run replays offline into an identical verdict — the round-trip the
|
|
200
|
+
old `--output` couldn't do.
|
|
201
|
+
- **Commit the gate policy.** Put `eval.ship` in your `soup.yaml` (`forgetting_threshold`,
|
|
202
|
+
`general_suite`, `task_mode`, …) and `soup ship --config soup.yaml` reads it — the gate is now
|
|
203
|
+
reviewable in a PR diff. Explicit flags still win.
|
|
204
|
+
- **Provenance-bound evidence.** `--config --emit-evidence` STAMPS a `config_sha` onto the
|
|
205
|
+
evidence; `--config --evidence` GATES on it — a PR that changed the recipe but forgot to
|
|
206
|
+
recompute its evidence is refused (exit 3). Tuning the threshold never falsely invalidates it.
|
|
207
|
+
- **The verdict on your PR.** `soup ship --push owner/repo#N` posts the SHIP / DON'T-SHIP card as
|
|
208
|
+
a GitHub comment; `soup ci init --config soup.yaml` wires the whole thing into CI.
|
|
217
209
|
|
|
218
210
|
```bash
|
|
219
|
-
|
|
220
|
-
soup
|
|
211
|
+
# producer (train job): stamp the scores with the config that produced them
|
|
212
|
+
soup ship --evidence scores.json --config soup.yaml --emit-evidence ship_evidence.json
|
|
213
|
+
|
|
214
|
+
# gate (PR CI): refuse evidence that doesn't match the committed config
|
|
215
|
+
soup ship --evidence ship_evidence.json --config soup.yaml --push owner/repo#42
|
|
216
|
+
soup ci init --config soup.yaml # writes .github/workflows/soup-gate.yml
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
<details>
|
|
220
|
+
<summary>Previous release — v0.71.38, The gate grows teeth (real leg-2 regression gate)</summary>
|
|
221
221
|
|
|
222
|
-
soup
|
|
223
|
-
|
|
222
|
+
`soup ship`'s regression leg became real: a fixed, extraction-based scorer over seven bundled,
|
|
223
|
+
offline suites (MCQ · arithmetic · tool-calling · JSON validity · safety/refusal). A tune that
|
|
224
|
+
wins your task but quietly breaks tool-calling now gets a **DON'T SHIP**. Zero new deps.
|
|
224
225
|
|
|
225
|
-
|
|
226
|
+
```bash
|
|
227
|
+
soup ship --base ./base --adapter ./my-lora --task-eval my_task.jsonl
|
|
228
|
+
# exit 0 = SHIP · 2 = DON'T SHIP · 3 = bad flags · 1 = runtime error
|
|
226
229
|
```
|
|
227
230
|
|
|
231
|
+
</details>
|
|
232
|
+
|
|
228
233
|
<details>
|
|
229
234
|
<summary>Previous release — v0.71.33, <code>soup draft</code> (measure speculative decoding)</summary>
|
|
230
235
|
|
|
@@ -49,38 +49,43 @@ 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
|
-
- **Honest result:** semantic dedup is **not** a paraphrase detector. Measured, paraphrase
|
|
66
|
-
cosines (0.49–0.76) *overlap* with genuinely-distinct rows (0.54–0.76) — "Add two numbers"
|
|
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.39 — CI for weights, not prompts.** `soup ship`'s verdict is now something Soup can emit, commit, review, and bind to the exact model that produced it — so a fine-tuning gate renders on every PR instead of asking you to hand-edit a JSON file.
|
|
53
|
+
|
|
54
|
+
- **Output is finally input.** `soup ship --emit-evidence ev.json` writes the scores in the
|
|
55
|
+
`--evidence` schema, so a run replays offline into an identical verdict — the round-trip the
|
|
56
|
+
old `--output` couldn't do.
|
|
57
|
+
- **Commit the gate policy.** Put `eval.ship` in your `soup.yaml` (`forgetting_threshold`,
|
|
58
|
+
`general_suite`, `task_mode`, …) and `soup ship --config soup.yaml` reads it — the gate is now
|
|
59
|
+
reviewable in a PR diff. Explicit flags still win.
|
|
60
|
+
- **Provenance-bound evidence.** `--config --emit-evidence` STAMPS a `config_sha` onto the
|
|
61
|
+
evidence; `--config --evidence` GATES on it — a PR that changed the recipe but forgot to
|
|
62
|
+
recompute its evidence is refused (exit 3). Tuning the threshold never falsely invalidates it.
|
|
63
|
+
- **The verdict on your PR.** `soup ship --push owner/repo#N` posts the SHIP / DON'T-SHIP card as
|
|
64
|
+
a GitHub comment; `soup ci init --config soup.yaml` wires the whole thing into CI.
|
|
73
65
|
|
|
74
66
|
```bash
|
|
75
|
-
|
|
76
|
-
soup
|
|
67
|
+
# producer (train job): stamp the scores with the config that produced them
|
|
68
|
+
soup ship --evidence scores.json --config soup.yaml --emit-evidence ship_evidence.json
|
|
77
69
|
|
|
78
|
-
|
|
79
|
-
soup
|
|
70
|
+
# gate (PR CI): refuse evidence that doesn't match the committed config
|
|
71
|
+
soup ship --evidence ship_evidence.json --config soup.yaml --push owner/repo#42
|
|
72
|
+
soup ci init --config soup.yaml # writes .github/workflows/soup-gate.yml
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
<details>
|
|
76
|
+
<summary>Previous release — v0.71.38, The gate grows teeth (real leg-2 regression gate)</summary>
|
|
77
|
+
|
|
78
|
+
`soup ship`'s regression leg became real: a fixed, extraction-based scorer over seven bundled,
|
|
79
|
+
offline suites (MCQ · arithmetic · tool-calling · JSON validity · safety/refusal). A tune that
|
|
80
|
+
wins your task but quietly breaks tool-calling now gets a **DON'T SHIP**. Zero new deps.
|
|
80
81
|
|
|
81
|
-
|
|
82
|
+
```bash
|
|
83
|
+
soup ship --base ./base --adapter ./my-lora --task-eval my_task.jsonl
|
|
84
|
+
# exit 0 = SHIP · 2 = DON'T SHIP · 3 = bad flags · 1 = runtime error
|
|
82
85
|
```
|
|
83
86
|
|
|
87
|
+
</details>
|
|
88
|
+
|
|
84
89
|
<details>
|
|
85
90
|
<summary>Previous release — v0.71.33, <code>soup draft</code> (measure speculative decoding)</summary>
|
|
86
91
|
|
|
@@ -160,14 +160,18 @@ 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
|
|
169
|
+
soup ship ... --emit-evidence ev.json Re-serialise the scores as replayable --evidence input (output-is-input, #312) (v0.71.39)
|
|
170
|
+
soup ship ... --config soup.yaml Read eval.ship gate defaults; --evidence GATES on provenance, --emit-evidence STAMPS it (v0.71.39)
|
|
171
|
+
soup ship ... --push owner/repo#N Post the verdict as a GitHub PR comment (best-effort; never flips the exit code) (v0.71.39)
|
|
168
172
|
soup card <registry-id> -o MODELCARD.md HF model card from a registry entry: training config, evals, hashes, lineage, artifacts (v0.71.35)
|
|
169
173
|
soup push --model ./out --repo you/m --card <registry-id> Upload that registry-driven card as the README (HF only) (v0.71.35)
|
|
170
|
-
soup ci init [--data d.jsonl --suite s.yaml --evidence ev.json] [--branch main --python 3.11] [--force] Write .github/workflows/soup-gate.yml: data validate -> expect -> ship gate on every PR (v0.71.35)
|
|
174
|
+
soup ci init [--data d.jsonl --suite s.yaml --evidence ev.json] [--config soup.yaml] [--branch main --python 3.11] [--force] Write .github/workflows/soup-gate.yml: data validate -> expect -> ship gate on every PR (v0.71.35); --config binds the gate to a committed config so it refuses stale evidence (v0.71.39)
|
|
171
175
|
soup mcp serve MCP server over stdio (drive Soup from Claude Code / Cursor / Cline; requires [mcp] extra) (v0.71.28)
|
|
172
176
|
soup mcp serve --allow-mutating Also expose plan-only train_start / export tools (never execute) (v0.71.28)
|
|
173
177
|
soup shrink --model <id|path> --drop-ratio 0.25 --calib c.jsonl -o shrunk Depth-prune least-important layer block + SHIP/DON'T-SHIP ppl verdict (exit 0/2/1) (v0.71.29)
|
|
@@ -355,11 +355,58 @@ 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`.
|
|
380
|
+
|
|
381
|
+
### Closing the evidence loop (v0.71.39)
|
|
382
|
+
|
|
383
|
+
The verdict is now emittable, committable, and provenance-bound so a fine-tuning gate runs on
|
|
384
|
+
every PR instead of relying on a hand-edited JSON file.
|
|
385
|
+
|
|
386
|
+
- **`--emit-evidence <path>`** re-serialises the scores into the `--evidence` INPUT schema, so a
|
|
387
|
+
run's output is replayable as input — feeding it back through `--evidence` (same threshold)
|
|
388
|
+
reproduces an identical verdict.
|
|
389
|
+
- **`--config soup.yaml`** reads a committed `eval.ship` block for the gate defaults
|
|
390
|
+
(`task_eval` / `task_mode` / `general_suite` / `forgetting_threshold` / `judge_model` /
|
|
391
|
+
`baseline`); an explicit CLI flag always wins. This makes the gate reviewable in a PR diff.
|
|
392
|
+
- **Provenance + staleness.** With `--emit-evidence`, `--config` STAMPS a `provenance` block
|
|
393
|
+
(`config_sha` — a semantic, order-insensitive recipe hash that EXCLUDES the `eval.ship` gate
|
|
394
|
+
policy, so tuning the threshold never invalidates evidence — plus `base_model` and a
|
|
395
|
+
best-effort `data_sha`). With `--evidence` alone, `--config` GATES: it refuses (exit 3)
|
|
396
|
+
evidence whose `config_sha` drifted from the committed config.
|
|
397
|
+
- **`--push owner/repo#N`** posts the verdict as a GitHub PR comment (best-effort — a missing
|
|
398
|
+
token or `gh` failure warns but never flips the SHIP / DON'T-SHIP exit code).
|
|
399
|
+
|
|
400
|
+
```bash
|
|
401
|
+
# Producer (train job): compute or stamp scores, bound to the committed recipe
|
|
402
|
+
soup ship --evidence scores.json --config soup.yaml --emit-evidence ship_evidence.json
|
|
403
|
+
|
|
404
|
+
# Gate (PR CI): refuse evidence that doesn't match the committed config, comment the verdict
|
|
405
|
+
soup ship --evidence ship_evidence.json --config soup.yaml --push owner/repo#42
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
`soup ci init --config soup.yaml` binds the generated workflow's ship step to the committed
|
|
409
|
+
config, so the whole loop runs in CI (see [commands.md](commands.md)).
|
|
363
410
|
|
|
364
411
|
|
|
365
412
|
## 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.39"
|
|
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]
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
+
from typing import Optional
|
|
10
|
+
|
|
9
11
|
import typer
|
|
10
12
|
from rich.console import Console
|
|
11
13
|
from rich.markup import escape
|
|
@@ -33,6 +35,10 @@ def init(
|
|
|
33
35
|
"3.11", "--python", help="Python version for the CI runner (e.g. 3.11)"
|
|
34
36
|
),
|
|
35
37
|
branch: str = typer.Option("main", "--branch", help="Branch the workflow triggers on"),
|
|
38
|
+
config: Optional[str] = typer.Option(
|
|
39
|
+
None, "--config",
|
|
40
|
+
help="Bind the ship gate to a committed soup.yaml (refuses stale evidence)",
|
|
41
|
+
),
|
|
36
42
|
output: str = typer.Option(
|
|
37
43
|
".github/workflows/soup-gate.yml", "-o", "--output", help="Workflow output path"
|
|
38
44
|
),
|
|
@@ -48,6 +54,7 @@ def init(
|
|
|
48
54
|
branch=branch,
|
|
49
55
|
output_path=output,
|
|
50
56
|
overwrite=force,
|
|
57
|
+
config_path=config,
|
|
51
58
|
)
|
|
52
59
|
except (ValueError, TypeError, OSError) as exc:
|
|
53
60
|
console.print(f"[red]{escape(str(exc))}[/]")
|