soup-cli 0.71.38__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.38 → soup_cli-0.71.39}/CHANGELOG.md +47 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/CONTRIBUTING.md +1 -1
- {soup_cli-0.71.38 → soup_cli-0.71.39}/PKG-INFO +25 -27
- {soup_cli-0.71.38 → soup_cli-0.71.39}/README.md +24 -26
- {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/commands.md +4 -1
- {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/evaluation.md +30 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/pyproject.toml +1 -1
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/ci.py +7 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/ship.py +323 -22
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/config/schema.py +41 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ci_workflow.py +42 -4
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ship_verdict.py +78 -1
- soup_cli-0.71.39/tests/test_v07139.py +802 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/.dockerignore +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/FUNDING.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/pull_request_template.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/.gitignore +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/.mailmap +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/AGENTS.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/CODEOWNERS +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/CONTRIBUTORS.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/Dockerfile +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/LICENSE +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/NOTICE +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/SECURITY.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/docker-compose.yml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/README.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/adapters-and-governance.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/backends-and-ops.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/compliance.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/data.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/models.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/peft-and-efficiency.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/performance-and-quantization.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/serving-and-export.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/docs/training.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/README.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/reward_hacking/rewards.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/soup.png +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/soup_logo_svg.svg +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cli.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cloud/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/cloud/modal.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/_eval_v0650.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/_eval_v07110.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/adapters.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/advise.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/card.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/data.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/data_canary.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/data_doctor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/data_topics.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/diagnose.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/draft.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/mcp.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/ra_dit.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/serve.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/shrink.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/spectrum.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/train.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/gate/format_json.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/gate/safety.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/gate/tool_call.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/loader.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/envs/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/envs/_common.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/envs/calculator.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/envs/guess_number.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/envs/retrieval_qa.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/gate_suites.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/mcp_server/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/mcp_server/registry.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/mcp_server/server.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/recipes/catalog.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/registry/store.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/eu-ai-act.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/hipaa.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/soc2.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/sr-11-7.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/asr.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/bitnet.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/grpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/mole_routing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/online_dpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/ppo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/raft.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/sft.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/tts.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/ui/app.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_arithmetic.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_fuse.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/advise.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/agent_sandbox.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/asr_metrics.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/best_of_n.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/canary.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/data_doctor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/data_lint.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/citation.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/live.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/draft.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/edit_kernels.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/embed.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/evolve.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/harm_probe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/hubs.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/interference_live.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/lisa.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/live_eval.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/mod.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/peft_wiring.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/prm_reward.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/probe_kernel.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ra_dit_run.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/raft.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/rehearsal.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/reward_hack_control.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/rl_checkpoint.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/semdedup.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/shrink.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/spectrum_scan.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/topics.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/truth_probe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/tts_codec.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/unlearn_kernels.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/templates/chat.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/templates/code.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/templates/medical.yaml +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/__init__.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/conftest.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/qa/v07114_qa.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_adapters.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_audio.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_autopilot.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_bco.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_bench.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_build_dag.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_callback.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_cans.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_chat.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_chat_template.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_cli.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_code_review_critical.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_code_review_deferred.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_code_review_high.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_code_review_medium_low.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_code_review_recurring.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_config.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_cost.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_curriculum.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_data.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_data_augment.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_data_sample.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_data_split.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_data_tools.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_diff.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_display.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_doctor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_embedding.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_errors.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_eval.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_export.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_formats.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_generate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_gpu.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_grpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_infer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_init.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_ipo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_kto.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_loader.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_log_level.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_merge.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_migrate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_moe.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_orpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_packing.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_part_a_wave1.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_performance.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_ppo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_pretrain.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_profile.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_profiling.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_progress.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_push.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_qat.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_quant_check.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_quickstart.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_recipes.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_registry.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_relora.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_replay.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_resume.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_review_fixes_v07133.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_rlvr.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_run_cost.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_runs.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_serve.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_server_generate.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_simpo.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_sweep.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_tracker.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_training_speed.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_tui.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_ui.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_unsloth.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0420.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0450.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0490.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0510.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0520.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0530.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v05310.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v05311.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0532.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0533.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0534.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0535.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0536.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0537.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0538.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0539.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0540.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0550.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0560.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0580.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0590.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07110.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07111.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07112.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07113.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07114.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07115.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07116.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07117.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07118.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07119.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0712.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07120.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07121.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07122.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07123.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07124.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07125.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07126.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07127.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07128.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07129.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0713.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07130.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07131.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07132.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07133.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07134.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07135.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07136.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07137.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v07138.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0714.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0715.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0716.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0717.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0718.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_v0719.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_validator.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_vision.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_warmup.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_why.py +0 -0
- {soup_cli-0.71.38 → soup_cli-0.71.39}/tests/test_windows_encoding.py +0 -0
|
@@ -12,6 +12,53 @@ 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
|
+
|
|
15
62
|
## [0.71.38] - 2026-07-17
|
|
16
63
|
|
|
17
64
|
**`soup ship`'s regression leg now has teeth.** Leg 2 (the catastrophic-forgetting
|
|
@@ -120,7 +120,7 @@ src/soup_cli/
|
|
|
120
120
|
templates/ - 21 built-in soup.yaml templates (YAML + manifest.json) with load_template loader (v0.39.0, +bco v0.40.0, +4 compliance v0.71.35)
|
|
121
121
|
ui/ - Web UI (FastAPI + HTML/JS SPA)
|
|
122
122
|
|
|
123
|
-
tests/ - Test suite (
|
|
123
|
+
tests/ - Test suite (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,41 +193,39 @@ 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
|
-
- **Breaking, on purpose.** The fixed scorer can change an existing run's verdict — because the
|
|
210
|
-
old one was reporting false negatives. Recompute any committed `--baseline`.
|
|
196
|
+
**v0.71.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.
|
|
211
209
|
|
|
212
210
|
```bash
|
|
213
|
-
#
|
|
214
|
-
soup ship --
|
|
215
|
-
# exit 0 = SHIP · 2 = DON'T SHIP · 3 = bad flags · 1 = runtime error
|
|
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
|
|
216
213
|
|
|
217
|
-
|
|
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
|
|
218
217
|
```
|
|
219
218
|
|
|
220
219
|
<details>
|
|
221
|
-
<summary>Previous release — v0.71.
|
|
220
|
+
<summary>Previous release — v0.71.38, The gate grows teeth (real leg-2 regression gate)</summary>
|
|
222
221
|
|
|
223
|
-
`soup
|
|
224
|
-
|
|
225
|
-
|
|
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.
|
|
226
225
|
|
|
227
226
|
```bash
|
|
228
|
-
soup
|
|
229
|
-
|
|
230
|
-
soup train --config sft.yaml --replay old_task.jsonl --replay-ratio 0.1
|
|
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
|
|
231
229
|
```
|
|
232
230
|
|
|
233
231
|
</details>
|
|
@@ -49,41 +49,39 @@ 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
|
-
- **Breaking, on purpose.** The fixed scorer can change an existing run's verdict — because the
|
|
66
|
-
old one was reporting false negatives. Recompute any committed `--baseline`.
|
|
52
|
+
**v0.71.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.
|
|
67
65
|
|
|
68
66
|
```bash
|
|
69
|
-
#
|
|
70
|
-
soup ship --
|
|
71
|
-
# exit 0 = SHIP · 2 = DON'T SHIP · 3 = bad flags · 1 = runtime error
|
|
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
|
|
72
69
|
|
|
73
|
-
|
|
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
|
|
74
73
|
```
|
|
75
74
|
|
|
76
75
|
<details>
|
|
77
|
-
<summary>Previous release — v0.71.
|
|
76
|
+
<summary>Previous release — v0.71.38, The gate grows teeth (real leg-2 regression gate)</summary>
|
|
78
77
|
|
|
79
|
-
`soup
|
|
80
|
-
|
|
81
|
-
|
|
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.
|
|
82
81
|
|
|
83
82
|
```bash
|
|
84
|
-
soup
|
|
85
|
-
|
|
86
|
-
soup train --config sft.yaml --replay old_task.jsonl --replay-ratio 0.1
|
|
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
|
|
87
85
|
```
|
|
88
86
|
|
|
89
87
|
</details>
|
|
@@ -166,9 +166,12 @@ soup ship ... --task-mode judge_score --judge-model ollama://llama3.1 Leg-1 via
|
|
|
166
166
|
soup ship ... --task-mode pairwise --judge-model ollama://llama3.1 Leg-1 via swap-debiased judge win-rate (base=0.5) (v0.71.31)
|
|
167
167
|
soup ship ... # leg-2 default = 7 bundled offline suites (MCQ/arithmetic + tool_call/format_json/safety, extraction scorer, ~40 items each) (v0.71.38)
|
|
168
168
|
soup ship ... --general-suite mmlu,gsm8k --baseline base.json lm-eval leg-2 override + recorded base scores
|
|
169
|
+
soup ship ... --emit-evidence ev.json Re-serialise the scores as replayable --evidence input (output-is-input, #312) (v0.71.39)
|
|
170
|
+
soup ship ... --config soup.yaml Read eval.ship gate defaults; --evidence GATES on provenance, --emit-evidence STAMPS it (v0.71.39)
|
|
171
|
+
soup ship ... --push owner/repo#N Post the verdict as a GitHub PR comment (best-effort; never flips the exit code) (v0.71.39)
|
|
169
172
|
soup card <registry-id> -o MODELCARD.md HF model card from a registry entry: training config, evals, hashes, lineage, artifacts (v0.71.35)
|
|
170
173
|
soup push --model ./out --repo you/m --card <registry-id> Upload that registry-driven card as the README (HF only) (v0.71.35)
|
|
171
|
-
soup ci init [--data d.jsonl --suite s.yaml --evidence ev.json] [--branch main --python 3.11] [--force] Write .github/workflows/soup-gate.yml: data validate -> expect -> ship gate on every PR (v0.71.35)
|
|
174
|
+
soup ci init [--data d.jsonl --suite s.yaml --evidence ev.json] [--config soup.yaml] [--branch main --python 3.11] [--force] Write .github/workflows/soup-gate.yml: data validate -> expect -> ship gate on every PR (v0.71.35); --config binds the gate to a committed config so it refuses stale evidence (v0.71.39)
|
|
172
175
|
soup mcp serve MCP server over stdio (drive Soup from Claude Code / Cursor / Cline; requires [mcp] extra) (v0.71.28)
|
|
173
176
|
soup mcp serve --allow-mutating Also expose plan-only train_start / export tools (never execute) (v0.71.28)
|
|
174
177
|
soup shrink --model <id|path> --drop-ratio 0.25 --calib c.jsonl -o shrunk Depth-prune least-important layer block + SHIP/DON'T-SHIP ppl verdict (exit 0/2/1) (v0.71.29)
|
|
@@ -378,6 +378,36 @@ Exit codes (v0.71.38): **0 = SHIP · 2 = DON'T SHIP · 3 = usage/flag error · 1
|
|
|
378
378
|
lives in `soup_cli.utils.ship_verdict` (`decide_ship` is a pure function — the whole truth table
|
|
379
379
|
is CPU-testable); the bundled suites live in `soup_cli.eval.gate_suites`.
|
|
380
380
|
|
|
381
|
+
### Closing the evidence loop (v0.71.39)
|
|
382
|
+
|
|
383
|
+
The verdict is now emittable, committable, and provenance-bound so a fine-tuning gate runs on
|
|
384
|
+
every PR instead of relying on a hand-edited JSON file.
|
|
385
|
+
|
|
386
|
+
- **`--emit-evidence <path>`** re-serialises the scores into the `--evidence` INPUT schema, so a
|
|
387
|
+
run's output is replayable as input — feeding it back through `--evidence` (same threshold)
|
|
388
|
+
reproduces an identical verdict.
|
|
389
|
+
- **`--config soup.yaml`** reads a committed `eval.ship` block for the gate defaults
|
|
390
|
+
(`task_eval` / `task_mode` / `general_suite` / `forgetting_threshold` / `judge_model` /
|
|
391
|
+
`baseline`); an explicit CLI flag always wins. This makes the gate reviewable in a PR diff.
|
|
392
|
+
- **Provenance + staleness.** With `--emit-evidence`, `--config` STAMPS a `provenance` block
|
|
393
|
+
(`config_sha` — a semantic, order-insensitive recipe hash that EXCLUDES the `eval.ship` gate
|
|
394
|
+
policy, so tuning the threshold never invalidates evidence — plus `base_model` and a
|
|
395
|
+
best-effort `data_sha`). With `--evidence` alone, `--config` GATES: it refuses (exit 3)
|
|
396
|
+
evidence whose `config_sha` drifted from the committed config.
|
|
397
|
+
- **`--push owner/repo#N`** posts the verdict as a GitHub PR comment (best-effort — a missing
|
|
398
|
+
token or `gh` failure warns but never flips the SHIP / DON'T-SHIP exit code).
|
|
399
|
+
|
|
400
|
+
```bash
|
|
401
|
+
# Producer (train job): compute or stamp scores, bound to the committed recipe
|
|
402
|
+
soup ship --evidence scores.json --config soup.yaml --emit-evidence ship_evidence.json
|
|
403
|
+
|
|
404
|
+
# Gate (PR CI): refuse evidence that doesn't match the committed config, comment the verdict
|
|
405
|
+
soup ship --evidence ship_evidence.json --config soup.yaml --push owner/repo#42
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
`soup ci init --config soup.yaml` binds the generated workflow's ship step to the committed
|
|
409
|
+
config, so the whole loop runs in CI (see [commands.md](commands.md)).
|
|
410
|
+
|
|
381
411
|
|
|
382
412
|
## NLG Evaluation Metrics (BLEU + ROUGE)
|
|
383
413
|
|
|
@@ -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))}[/]")
|