soup-cli 0.71.6__tar.gz → 0.71.7__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.6 → soup_cli-0.71.7}/CHANGELOG.md +34 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/CONTRIBUTING.md +1 -1
- {soup_cli-0.71.6 → soup_cli-0.71.7}/PKG-INFO +17 -15
- {soup_cli-0.71.6 → soup_cli-0.71.7}/README.md +16 -14
- {soup_cli-0.71.6 → soup_cli-0.71.7}/docs/commands.md +2 -1
- {soup_cli-0.71.6 → soup_cli-0.71.7}/docs/evaluation.md +26 -4
- {soup_cli-0.71.6 → soup_cli-0.71.7}/pyproject.toml +1 -1
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/_eval_v0650.py +114 -4
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/advise.py +40 -6
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/diagnose.py +101 -38
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/tunability.py +32 -1
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/advise.py +151 -20
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/behavior_battery.py +55 -1
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/capability_suite.py +111 -1
- soup_cli-0.71.7/src/soup_cli/utils/diagnose/live.py +320 -0
- soup_cli-0.71.7/src/soup_cli/utils/live_eval.py +464 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/tunability.py +119 -1
- soup_cli-0.71.7/tests/test_v0717.py +868 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/.dockerignore +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/.github/FUNDING.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/.github/pull_request_template.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/.gitignore +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/.mailmap +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/AGENTS.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/CODEOWNERS +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/CONTRIBUTORS.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/Dockerfile +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/LICENSE +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/NOTICE +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/SECURITY.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/docker-compose.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/docs/README.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/docs/adapters-and-governance.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/docs/backends-and-ops.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/docs/data.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/docs/models.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/docs/peft-and-efficiency.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/docs/performance-and-quantization.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/docs/serving-and-export.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/docs/training.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/examples/README.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/soup.png +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/soup_logo_svg.svg +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/cli.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/adapters.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/data.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/serve.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/train.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/config/schema.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/loader.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/recipes/catalog.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/registry/store.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/grpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/ppo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/sft.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/ui/app.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/hubs.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/peft_wiring.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/rl_checkpoint.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/templates/chat.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/templates/code.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/templates/medical.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/conftest.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_adapters.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_audio.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_autopilot.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_bco.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_bench.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_callback.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_cans.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_chat.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_chat_template.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_cli.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_config.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_cost.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_curriculum.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_data.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_data_augment.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_data_sample.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_data_split.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_data_tools.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_diff.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_display.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_doctor.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_embedding.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_errors.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_eval.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_export.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_formats.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_generate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_gpu.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_grpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_infer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_init.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_ipo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_kto.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_loader.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_log_level.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_merge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_migrate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_moe.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_orpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_packing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_part_a_wave1.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_performance.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_ppo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_pretrain.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_profile.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_profiling.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_progress.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_push.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_qat.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_quant_check.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_quickstart.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_recipes.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_registry.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_relora.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_replay.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_resume.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_rlvr.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_run_cost.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_runs.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_serve.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_server_generate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_simpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_sweep.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_tracker.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_training_speed.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_tui.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_ui.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_unsloth.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0420.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0450.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0490.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0510.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0520.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0530.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v05310.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v05311.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0532.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0533.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0534.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0535.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0536.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0537.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0538.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0539.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0540.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0550.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0560.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0580.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0590.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0712.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0713.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0714.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0715.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_v0716.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_validator.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_vision.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_why.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.7}/tests/test_windows_encoding.py +0 -0
|
@@ -12,6 +12,40 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.71.7] - 2026-06-02
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- **Eval live runners** — six probe surfaces that previously emitted heuristic
|
|
19
|
+
/ neutral stubs now load a real model and run live (closes #161, #162, #208,
|
|
20
|
+
#211, #212, #165). New shared `soup_cli/utils/live_eval.py` provides the
|
|
21
|
+
model-loading primitives (generator / multi-generator closures, masked
|
|
22
|
+
cross-entropy eval-loss, a short-LoRA probe, and held-out logit agreement);
|
|
23
|
+
every heavy import (`torch` / `transformers` / `peft` / `lm_eval`) is lazy.
|
|
24
|
+
- **`soup advise --probe-model <id>`** — runs a LIVE ROI probe: zero/few-shot
|
|
25
|
+
token-F1 baselines, a short LoRA probe (relative held-out-loss improvement +
|
|
26
|
+
real wall-clock), and base-model proximity (held-out logit agreement) folded
|
|
27
|
+
into the dataset profile. Without `--probe-model`, `--probe` stays the offline
|
|
28
|
+
heuristic.
|
|
29
|
+
- **`soup tunability --live`** — replaces the offline heuristic with a real
|
|
30
|
+
per-candidate LoRA probe (loads each `repo_id`, trains `--probe-steps` on a
|
|
31
|
+
held-out-excluded slice, reports the held-out-loss drop).
|
|
32
|
+
- **`soup eval capability --live --model <id>`** — invokes lm-eval-harness per
|
|
33
|
+
resolved task (or a `--tasks` override) with `--limit` / `--device`, isolating
|
|
34
|
+
per-task failures and surfacing a no-metric result as an explicit error.
|
|
35
|
+
- **`soup eval behavior --base-model <id> [--adapter <path>]`** — generates
|
|
36
|
+
pre/post responses on the bundled behaviour battery and scores the live diff.
|
|
37
|
+
- **`soup diagnose --base-model <id> [--adapter <path>] [--dataset <jsonl>]
|
|
38
|
+
[--tokenizer <id>]`** — runs all six failure-mode probes (forgetting / refusal
|
|
39
|
+
/ format / mode_collapse / memorization / contamination) live via
|
|
40
|
+
`soup_cli.utils.diagnose.live.run_live_diagnose`; falls back to neutral OK or
|
|
41
|
+
`--evidence` JSON when no model is supplied.
|
|
42
|
+
|
|
43
|
+
### Security
|
|
44
|
+
- The two new JSONL dataset readers (`diagnose.live._load_dataset_rows`,
|
|
45
|
+
`tunability._load_jsonl_rows`) open with `O_NOFOLLOW` after the cwd-containment
|
|
46
|
+
check, closing the check→open TOCTOU window (matches the v0.65 / v0.67 reader
|
|
47
|
+
policy).
|
|
48
|
+
|
|
15
49
|
## [0.71.6] - 2026-06-02
|
|
16
50
|
|
|
17
51
|
### Added
|
|
@@ -120,7 +120,7 @@ src/soup_cli/
|
|
|
120
120
|
templates/ - 17 built-in soup.yaml templates (YAML + manifest.json) with load_template loader (v0.39.0, +bco v0.40.0)
|
|
121
121
|
ui/ - Web UI (FastAPI + HTML/JS SPA)
|
|
122
122
|
|
|
123
|
-
tests/ - Test suite (
|
|
123
|
+
tests/ - Test suite (277 files, 12771 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.7
|
|
4
4
|
Summary: Fine-tune 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
|
|
@@ -183,20 +183,22 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
183
183
|
|
|
184
184
|
## What's New
|
|
185
185
|
|
|
186
|
-
**v0.71.
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
- **`soup
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
186
|
+
**v0.71.7 — Eval live runners.** Six probe surfaces that used to emit heuristic / neutral stubs
|
|
187
|
+
now load a real model and run live (opt-in flags; the offline paths stay the default):
|
|
188
|
+
|
|
189
|
+
- **`soup diagnose --base-model <id> [--adapter <path>] [--dataset d.jsonl]`** — runs all six
|
|
190
|
+
failure-mode probes (forgetting / refusal / format / mode_collapse / memorization /
|
|
191
|
+
contamination) against the loaded model instead of emitting neutral OK.
|
|
192
|
+
- **`soup advise --probe-model <id>`** — a live ROI probe: zero/few-shot token-F1 baselines, a
|
|
193
|
+
short LoRA probe (real held-out-loss drop + wall-clock), and base-model proximity.
|
|
194
|
+
- **`soup tunability --live`** — a real per-candidate LoRA probe (loads each base, trains
|
|
195
|
+
`--probe-steps` on a held-out slice).
|
|
196
|
+
- **`soup eval capability --live --model <id>`** — invokes lm-eval-harness per task (with
|
|
197
|
+
`--tasks` / `--limit` / `--device`), isolating per-task failures.
|
|
198
|
+
- **`soup eval behavior --base-model <id> [--adapter <path>]`** — generates pre/post responses on
|
|
199
|
+
the bundled behaviour battery and scores the live diff.
|
|
200
|
+
- New shared `soup_cli/utils/live_eval.py` holds the model-loading primitives; heavy imports stay
|
|
201
|
+
lazy. Validated end-to-end on SmolLM2-135M (RTX 3050 4 GB).
|
|
200
202
|
|
|
201
203
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
202
204
|
|
|
@@ -49,20 +49,22 @@ 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
|
-
- **`soup
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
52
|
+
**v0.71.7 — Eval live runners.** Six probe surfaces that used to emit heuristic / neutral stubs
|
|
53
|
+
now load a real model and run live (opt-in flags; the offline paths stay the default):
|
|
54
|
+
|
|
55
|
+
- **`soup diagnose --base-model <id> [--adapter <path>] [--dataset d.jsonl]`** — runs all six
|
|
56
|
+
failure-mode probes (forgetting / refusal / format / mode_collapse / memorization /
|
|
57
|
+
contamination) against the loaded model instead of emitting neutral OK.
|
|
58
|
+
- **`soup advise --probe-model <id>`** — a live ROI probe: zero/few-shot token-F1 baselines, a
|
|
59
|
+
short LoRA probe (real held-out-loss drop + wall-clock), and base-model proximity.
|
|
60
|
+
- **`soup tunability --live`** — a real per-candidate LoRA probe (loads each base, trains
|
|
61
|
+
`--probe-steps` on a held-out slice).
|
|
62
|
+
- **`soup eval capability --live --model <id>`** — invokes lm-eval-harness per task (with
|
|
63
|
+
`--tasks` / `--limit` / `--device`), isolating per-task failures.
|
|
64
|
+
- **`soup eval behavior --base-model <id> [--adapter <path>]`** — generates pre/post responses on
|
|
65
|
+
the bundled behaviour battery and scores the live diff.
|
|
66
|
+
- New shared `soup_cli/utils/live_eval.py` holds the model-loading primitives; heavy imports stay
|
|
67
|
+
lazy. Validated end-to-end on SmolLM2-135M (RTX 3050 4 GB).
|
|
66
68
|
|
|
67
69
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
68
70
|
|
|
@@ -179,7 +179,8 @@ soup ingest|prune-prompt|ab|data active-sample ... --slack-url <https> | --disco
|
|
|
179
179
|
soup drift-alarm --reference <jsonl> --live <jsonl> --threshold 0.2 Rolling-KL drift alarm (exit 3 on drift)
|
|
180
180
|
soup drift-alarm ... --slack-url <https> | --discord-url <https> Optional SSRF-validated webhook on drift detected
|
|
181
181
|
soup tunability --list List built-in candidate-base catalogue
|
|
182
|
-
soup tunability --dataset <jsonl> [--candidates a,b,c] Probe
|
|
182
|
+
soup tunability --dataset <jsonl> [--candidates a,b,c] Probe candidate bases + Pareto frontier report
|
|
183
|
+
soup tunability --dataset <jsonl> --live [--device cpu] LIVE per-candidate LoRA probe (loads each repo)
|
|
183
184
|
soup plan --config soup.yaml Pre-flight summary + write soup.tfstate
|
|
184
185
|
soup apply --config soup.yaml [--dry-run] Lock-and-execute; refuses on drift (exit 3)
|
|
185
186
|
soup env lock | status | check Hermetic env lockfile + ABI drift detection (exit 3)
|
|
@@ -61,9 +61,13 @@ soup advise data.jsonl --goal "make our chatbot more concise"
|
|
|
61
61
|
# Why: Task is summarization with 120 rows and healthy diversity ...
|
|
62
62
|
# Flip when: the prompt-engineering baseline already meets your target ...
|
|
63
63
|
|
|
64
|
-
# Optional
|
|
64
|
+
# Optional ROI probe (offline heuristic: zero/few-shot + RAG + LoRA estimate).
|
|
65
65
|
soup advise data.jsonl --goal "summarize my reports" --probe
|
|
66
66
|
|
|
67
|
+
# LIVE ROI probe (v0.71.7): loads the model for zero/few-shot token-F1, a short
|
|
68
|
+
# LoRA probe, and base-model proximity (held-out logit agreement). Implies --probe.
|
|
69
|
+
soup advise data.jsonl --goal "..." --probe-model HuggingFaceTB/SmolLM2-135M
|
|
70
|
+
|
|
67
71
|
# Print the rubric / evidence trail of the last verdict.
|
|
68
72
|
soup advise explain
|
|
69
73
|
|
|
@@ -239,9 +243,13 @@ Default threshold 0.2 matches v0.43.0 KL-delta quant-check thresholds. Webhooks
|
|
|
239
243
|
`soup diagnose` scores six independent failure modes for a trained adapter and renders an OK / MINOR / MAJOR verdict per mode plus an overall headline — same taxonomy as Quant-Lobotomy. Useful for catching adapter regressions that a loss curve cannot distinguish from a healthy run.
|
|
240
244
|
|
|
241
245
|
```bash
|
|
242
|
-
#
|
|
246
|
+
# Neutral report (no model load — runs as a sanity check)
|
|
243
247
|
soup diagnose my-run-id
|
|
244
248
|
|
|
249
|
+
# LIVE (v0.71.7): load the model and run all six probes for real
|
|
250
|
+
soup diagnose my-run-id --base-model HuggingFaceTB/SmolLM2-135M \
|
|
251
|
+
--adapter ./out --dataset train.jsonl --tokenizer HuggingFaceTB/SmolLM2-135M
|
|
252
|
+
|
|
245
253
|
# Compute scores from a pre-built evidence JSON
|
|
246
254
|
soup diagnose my-run-id --evidence evidence.json --output diag.json
|
|
247
255
|
|
|
@@ -252,6 +260,12 @@ soup diagnose my-run-id --badge diag.svg
|
|
|
252
260
|
soup diagnose my-run-id --output diag.json --attach-to-registry abc123
|
|
253
261
|
```
|
|
254
262
|
|
|
263
|
+
**Live runners (v0.71.7).** With `--base-model` the six probes run against the loaded model
|
|
264
|
+
(+ optional `--adapter` LoRA path, `--dataset` for the forgetting / format / memorization probes,
|
|
265
|
+
`--tokenizer` for a sub-word memorization variant) instead of emitting neutral OK. `refusal` uses
|
|
266
|
+
a built-in probe set; `format` only fires when the dataset's own targets look like JSON;
|
|
267
|
+
`contamination` stays neutral unless a benchmark corpus is supplied. Validated on SmolLM2-135M.
|
|
268
|
+
|
|
255
269
|
**Six failure-mode probes:**
|
|
256
270
|
|
|
257
271
|
| Mode | What it catches | Score range |
|
|
@@ -429,7 +443,7 @@ soup tunability --dataset ./eval.jsonl --candidates qwen3-0.6b,phi-4-mini --plan
|
|
|
429
443
|
soup tunability --dataset ./eval.jsonl --probe-steps 100 --output ./tunability.json
|
|
430
444
|
```
|
|
431
445
|
|
|
432
|
-
The report is a Pareto frontier over (eval delta from base, train cost, license) — candidates that nothing dominates on both axes survive, so you see a clean shortlist instead of a noisy single-leaderboard score.
|
|
446
|
+
The report is a Pareto frontier over (eval delta from base, train cost, license) — candidates that nothing dominates on both axes survive, so you see a clean shortlist instead of a noisy single-leaderboard score. By default the probe is a deterministic offline heuristic; pass `--live` (v0.71.7) to run a real per-candidate LoRA probe (loads each `repo_id`, trains `--probe-steps` on a held-out-excluded slice, reports the held-out-loss drop). `--device` selects cuda / cpu.
|
|
433
447
|
|
|
434
448
|
|
|
435
449
|
## Eval Depth (`soup eval behavior / capability / checklist / irt-subset`)
|
|
@@ -459,6 +473,10 @@ Persist a calibration once and reuse it across runs (v0.71.1): `write_judge_cali
|
|
|
459
473
|
# Score over-refusal regression on XSTest (operator supplies evidence JSON)
|
|
460
474
|
soup eval behavior my_run --battery xstest --evidence ev.json --output diff.json
|
|
461
475
|
|
|
476
|
+
# LIVE (v0.71.7): generate pre/post responses on the bundled battery + score the diff
|
|
477
|
+
soup eval behavior my_run --battery xstest \
|
|
478
|
+
--base-model HuggingFaceTB/SmolLM2-135M --adapter ./out
|
|
479
|
+
|
|
462
480
|
# Bundled batteries: xstest, harmbench, jailbreakbench, elephant, syceval
|
|
463
481
|
# Harmful prompts ship REDACTED — pull real sets from upstream papers.
|
|
464
482
|
```
|
|
@@ -472,9 +490,13 @@ soup eval capability my_run --suite math --output cap.json # AIME + MATH-500
|
|
|
472
490
|
soup eval capability my_run --suite code --output cap.json # HumanEval+ + SWE-bench-Verified
|
|
473
491
|
soup eval capability my_run --suite fast --output cap.json # MMLU-Pro + HumanEval+
|
|
474
492
|
soup eval capability my_run --suite full --output cap.json # all 7 benchmarks
|
|
493
|
+
|
|
494
|
+
# LIVE (v0.71.7): invoke lm-eval-harness per task against a real model
|
|
495
|
+
soup eval capability my_run --live --model HuggingFaceTB/SmolLM2-135M \
|
|
496
|
+
--tasks arc_easy --limit 1 --device cpu
|
|
475
497
|
```
|
|
476
498
|
|
|
477
|
-
|
|
499
|
+
Without `--live` it emits the (benchmark, lm-eval task) manifest; chain into the existing `soup eval benchmark` surface. With `--live --model <id>` (v0.71.7) it runs lm-eval-harness per resolved task — or a `--tasks` override — isolating per-task failures and capping examples with `--limit`.
|
|
478
500
|
|
|
479
501
|
**CheckList behavioural DSL** — Ribeiro et al. 2020 MFT / INV / DIR tests:
|
|
480
502
|
|
|
@@ -123,8 +123,24 @@ def register(app: typer.Typer, console: Console) -> None:
|
|
|
123
123
|
None, "--output", "-o",
|
|
124
124
|
help="Where to write the rendered BehaviorDiffReport JSON.",
|
|
125
125
|
),
|
|
126
|
+
base_model: Optional[str] = typer.Option(
|
|
127
|
+
None, "--base-model",
|
|
128
|
+
help="Base model id for a LIVE diff (generates pre/post responses).",
|
|
129
|
+
),
|
|
130
|
+
adapter: Optional[str] = typer.Option(
|
|
131
|
+
None, "--adapter",
|
|
132
|
+
help="LoRA adapter path for the 'post' model in a live diff.",
|
|
133
|
+
),
|
|
134
|
+
device: Optional[str] = typer.Option(
|
|
135
|
+
None, "--device", help="Device for the live diff (cuda / cpu).",
|
|
136
|
+
),
|
|
126
137
|
) -> None:
|
|
127
|
-
"""Score a run on a bundled behaviour battery (pre/post diff).
|
|
138
|
+
"""Score a run on a bundled behaviour battery (pre/post diff).
|
|
139
|
+
|
|
140
|
+
With ``--base-model`` (optionally ``--adapter``) this LIVE-generates
|
|
141
|
+
pre/post responses on the bundled battery and scores them. Without it,
|
|
142
|
+
falls back to ``--evidence`` JSON, or a neutral OK report.
|
|
143
|
+
"""
|
|
128
144
|
from soup_cli.utils.behavior_battery import (
|
|
129
145
|
compute_behavior_diff,
|
|
130
146
|
get_battery_spec,
|
|
@@ -152,6 +168,34 @@ def register(app: typer.Typer, console: Console) -> None:
|
|
|
152
168
|
border_style="cyan",
|
|
153
169
|
))
|
|
154
170
|
|
|
171
|
+
if base_model is not None:
|
|
172
|
+
from soup_cli.utils.behavior_battery import run_behavior_live
|
|
173
|
+
|
|
174
|
+
try:
|
|
175
|
+
report = run_behavior_live(
|
|
176
|
+
run_id=run_id,
|
|
177
|
+
battery=canonical,
|
|
178
|
+
base_model=base_model,
|
|
179
|
+
adapter=adapter,
|
|
180
|
+
device=device,
|
|
181
|
+
)
|
|
182
|
+
except (RuntimeError, ValueError, TypeError, OSError) as exc:
|
|
183
|
+
console.print(f"[red]Live behaviour diff failed:[/] {escape(str(exc))}")
|
|
184
|
+
raise typer.Exit(2) from exc
|
|
185
|
+
table = Table(title=f"Behaviour Diff (live) — {canonical}")
|
|
186
|
+
table.add_column("Stage", style="bold")
|
|
187
|
+
table.add_column("Value", justify="right")
|
|
188
|
+
table.add_column("Verdict")
|
|
189
|
+
table.add_row("Pre", f"{report.pre.value:.3f}", report.pre.verdict)
|
|
190
|
+
table.add_row("Post", f"{report.post.value:.3f}", report.post.verdict)
|
|
191
|
+
table.add_row("Δ", f"{report.delta:+.3f}", report.overall)
|
|
192
|
+
console.print(table)
|
|
193
|
+
if output:
|
|
194
|
+
_write_json_output(report.to_dict(), output, console=console)
|
|
195
|
+
if report.overall == "MAJOR":
|
|
196
|
+
raise typer.Exit(2)
|
|
197
|
+
return
|
|
198
|
+
|
|
155
199
|
if evidence is None:
|
|
156
200
|
# No evidence: emit neutral OK report (matches v0.56.0 diagnose
|
|
157
201
|
# policy when no probes are supplied).
|
|
@@ -214,8 +258,31 @@ def register(app: typer.Typer, console: Console) -> None:
|
|
|
214
258
|
None, "--output", "-o",
|
|
215
259
|
help="Where to write the rendered CapabilityReport JSON.",
|
|
216
260
|
),
|
|
261
|
+
live: bool = typer.Option(
|
|
262
|
+
False, "--live",
|
|
263
|
+
help="Run the suite LIVE via lm-eval-harness against --model.",
|
|
264
|
+
),
|
|
265
|
+
model: Optional[str] = typer.Option(
|
|
266
|
+
None, "--model", "-m",
|
|
267
|
+
help="HF model id for a live run (required with --live).",
|
|
268
|
+
),
|
|
269
|
+
tasks: Optional[str] = typer.Option(
|
|
270
|
+
None, "--tasks",
|
|
271
|
+
help="Comma-separated lm-eval task override (live; bypasses --suite).",
|
|
272
|
+
),
|
|
273
|
+
limit: Optional[int] = typer.Option(
|
|
274
|
+
None, "--limit",
|
|
275
|
+
help="Cap eval examples per task (live; use 1-5 for a smoke).",
|
|
276
|
+
),
|
|
277
|
+
device: Optional[str] = typer.Option(
|
|
278
|
+
None, "--device", help="Device for the live run (cuda / cpu).",
|
|
279
|
+
),
|
|
217
280
|
) -> None:
|
|
218
|
-
"""Run a bundled capability profile (MMLU-Pro / GPQA / AIME / ...).
|
|
281
|
+
"""Run a bundled capability profile (MMLU-Pro / GPQA / AIME / ...).
|
|
282
|
+
|
|
283
|
+
Without ``--live`` this emits a task manifest (no model load). With
|
|
284
|
+
``--live --model <id>`` it invokes lm-eval-harness per task.
|
|
285
|
+
"""
|
|
219
286
|
from soup_cli.utils.capability_suite import (
|
|
220
287
|
list_suites,
|
|
221
288
|
resolve_suite,
|
|
@@ -237,6 +304,49 @@ def register(app: typer.Typer, console: Console) -> None:
|
|
|
237
304
|
)
|
|
238
305
|
raise typer.Exit(2) from exc
|
|
239
306
|
|
|
307
|
+
if live:
|
|
308
|
+
if not model:
|
|
309
|
+
console.print("[red]--live requires --model <hf-id>.[/]")
|
|
310
|
+
raise typer.Exit(2)
|
|
311
|
+
from soup_cli.utils.capability_suite import run_capability_suite
|
|
312
|
+
|
|
313
|
+
task_list = (
|
|
314
|
+
[t.strip() for t in tasks.split(",") if t.strip()] if tasks else None
|
|
315
|
+
)
|
|
316
|
+
try:
|
|
317
|
+
payload = run_capability_suite(
|
|
318
|
+
run_id=run_id,
|
|
319
|
+
model_id=model,
|
|
320
|
+
suite=None if task_list else canonical,
|
|
321
|
+
tasks=task_list,
|
|
322
|
+
device=device,
|
|
323
|
+
limit=limit,
|
|
324
|
+
)
|
|
325
|
+
except (RuntimeError, ValueError, TypeError) as exc:
|
|
326
|
+
console.print(f"[red]Capability run failed:[/] {escape(str(exc))}")
|
|
327
|
+
raise typer.Exit(2) from exc
|
|
328
|
+
table = Table(title=f"Capability Suite (live) — {canonical}")
|
|
329
|
+
table.add_column("Benchmark")
|
|
330
|
+
table.add_column("Metric")
|
|
331
|
+
table.add_column("Score", justify="right")
|
|
332
|
+
for r in payload["results"]:
|
|
333
|
+
if "error" in r:
|
|
334
|
+
table.add_row(
|
|
335
|
+
escape(str(r["benchmark"])),
|
|
336
|
+
"[red]error[/]",
|
|
337
|
+
escape(str(r["error"])),
|
|
338
|
+
)
|
|
339
|
+
else:
|
|
340
|
+
table.add_row(
|
|
341
|
+
escape(str(r["benchmark"])),
|
|
342
|
+
escape(str(r.get("metric", ""))),
|
|
343
|
+
f"{r.get('score', float('nan')):.4f}",
|
|
344
|
+
)
|
|
345
|
+
console.print(table)
|
|
346
|
+
if output:
|
|
347
|
+
_write_json_output(payload, output, console=console)
|
|
348
|
+
return
|
|
349
|
+
|
|
240
350
|
benchmarks = resolve_suite(canonical)
|
|
241
351
|
table = Table(title=f"Capability Suite — {canonical}")
|
|
242
352
|
table.add_column("Benchmark")
|
|
@@ -250,8 +360,8 @@ def register(app: typer.Typer, console: Console) -> None:
|
|
|
250
360
|
"suite": canonical,
|
|
251
361
|
"benchmarks": [{"name": b.name, "task": b.lm_eval_task} for b in benchmarks],
|
|
252
362
|
"note": (
|
|
253
|
-
"
|
|
254
|
-
"the listed tasks
|
|
363
|
+
"Manifest only — pass --live --model <id> to invoke "
|
|
364
|
+
"lm-eval-harness against the listed tasks."
|
|
255
365
|
),
|
|
256
366
|
}
|
|
257
367
|
if output:
|
|
@@ -35,6 +35,7 @@ from soup_cli.utils.advise import (
|
|
|
35
35
|
compute_dataset_profile,
|
|
36
36
|
format_verdict_rubric,
|
|
37
37
|
load_advise_dataset,
|
|
38
|
+
measure_base_model_proximity,
|
|
38
39
|
synth_probe_baselines,
|
|
39
40
|
synth_probe_lora_delta,
|
|
40
41
|
)
|
|
@@ -217,10 +218,25 @@ def advise_run(
|
|
|
217
218
|
False,
|
|
218
219
|
"--probe",
|
|
219
220
|
help=(
|
|
220
|
-
"Also run
|
|
221
|
-
"
|
|
221
|
+
"Also run an ROI probe (zero/few-shot + RAG baseline + N-step LoRA). "
|
|
222
|
+
"Heuristic by default; pass --probe-model <id> for a LIVE probe that "
|
|
223
|
+
"loads the model + LoRA-trains on a tiny held-out slice."
|
|
222
224
|
),
|
|
223
225
|
),
|
|
226
|
+
probe_model: Optional[str] = typer.Option(
|
|
227
|
+
None,
|
|
228
|
+
"--probe-model",
|
|
229
|
+
help=(
|
|
230
|
+
"Base model id for a LIVE probe (e.g. HuggingFaceTB/SmolLM2-135M). "
|
|
231
|
+
"When set, the probe loads this model, scores zero/few-shot, "
|
|
232
|
+
"LoRA-trains, and measures base-model proximity. Implies --probe."
|
|
233
|
+
),
|
|
234
|
+
),
|
|
235
|
+
probe_device: Optional[str] = typer.Option(
|
|
236
|
+
None,
|
|
237
|
+
"--probe-device",
|
|
238
|
+
help="Device for the live probe (cuda / cpu). Auto-detected when omitted.",
|
|
239
|
+
),
|
|
224
240
|
record: bool = typer.Option(
|
|
225
241
|
False,
|
|
226
242
|
"--record",
|
|
@@ -246,18 +262,36 @@ def advise_run(
|
|
|
246
262
|
console.print(f"[red]Dataset error:[/] {escape(str(exc))}")
|
|
247
263
|
raise typer.Exit(1) from exc
|
|
248
264
|
|
|
265
|
+
# --probe-model implies --probe.
|
|
266
|
+
run_probe = probe or probe_model is not None
|
|
267
|
+
|
|
268
|
+
# #162 — when a live probe model is supplied, measure base-model proximity
|
|
269
|
+
# (held-out logit agreement) and fold it into the dataset profile. Best
|
|
270
|
+
# effort: any failure leaves proximity unmeasured (None).
|
|
271
|
+
proximity: Optional[float] = None
|
|
272
|
+
if probe_model is not None:
|
|
273
|
+
try:
|
|
274
|
+
proximity = measure_base_model_proximity(
|
|
275
|
+
rows, model=probe_model, device=probe_device
|
|
276
|
+
)
|
|
277
|
+
except (TypeError, ValueError) as exc:
|
|
278
|
+
console.print(f"[red]Proximity probe failed:[/] {escape(str(exc))}")
|
|
279
|
+
raise typer.Exit(1) from exc
|
|
280
|
+
|
|
249
281
|
try:
|
|
250
282
|
task_category = classify_task(rows, goal=goal)
|
|
251
|
-
profile = compute_dataset_profile(rows)
|
|
283
|
+
profile = compute_dataset_profile(rows, base_model_proximity=proximity)
|
|
252
284
|
except (TypeError, ValueError) as exc:
|
|
253
285
|
console.print(f"[red]Analysis failed:[/] {escape(str(exc))}")
|
|
254
286
|
raise typer.Exit(1) from exc
|
|
255
287
|
|
|
256
288
|
roi = ROIEstimate()
|
|
257
|
-
if
|
|
289
|
+
if run_probe:
|
|
258
290
|
try:
|
|
259
|
-
baselines = synth_probe_baselines(rows)
|
|
260
|
-
sft_delta, wall_clock = synth_probe_lora_delta(
|
|
291
|
+
baselines = synth_probe_baselines(rows, model=probe_model, device=probe_device)
|
|
292
|
+
sft_delta, wall_clock = synth_probe_lora_delta(
|
|
293
|
+
rows, model=probe_model, device=probe_device
|
|
294
|
+
)
|
|
261
295
|
except (TypeError, ValueError) as exc:
|
|
262
296
|
console.print(f"[red]Probe failed:[/] {escape(str(exc))}")
|
|
263
297
|
raise typer.Exit(1) from exc
|
|
@@ -7,12 +7,12 @@ Top-level CLI command (NOT a sub-group) — operators type:
|
|
|
7
7
|
soup diagnose <run-id> --badge diagnose.svg
|
|
8
8
|
soup diagnose <run-id> --attach-to-registry <id>
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
memorization / contamination)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
Since v0.71.7 (#165) the six probe runners (forgetting / refusal / format /
|
|
11
|
+
mode_collapse / memorization / contamination) run LIVE when ``--base-model``
|
|
12
|
+
is supplied: the model (+ optional ``--adapter`` LoRA path, ``--dataset``,
|
|
13
|
+
``--tokenizer``) is loaded and each probe is fed real generator output via
|
|
14
|
+
``soup_cli.utils.diagnose.live.run_live_diagnose``. Without ``--base-model``
|
|
15
|
+
the command computes scores from ``--evidence`` JSON or defaults to neutral OK.
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
18
|
from __future__ import annotations
|
|
@@ -173,6 +173,47 @@ def _attach_to_registry(report: FailureReport, registry_id: str, output: str) ->
|
|
|
173
173
|
)
|
|
174
174
|
|
|
175
175
|
|
|
176
|
+
def _emit_report(
|
|
177
|
+
report: FailureReport,
|
|
178
|
+
*,
|
|
179
|
+
output: Optional[str],
|
|
180
|
+
badge: Optional[str],
|
|
181
|
+
attach_to_registry: Optional[str],
|
|
182
|
+
) -> None:
|
|
183
|
+
"""Shared render + optional output/badge/registry-attach (no exit)."""
|
|
184
|
+
_render_report(report)
|
|
185
|
+
|
|
186
|
+
if output:
|
|
187
|
+
try:
|
|
188
|
+
write_report(report, output)
|
|
189
|
+
console.print(f"[green]Wrote[/] {escape(output)}")
|
|
190
|
+
except (OSError, ValueError) as exc:
|
|
191
|
+
console.print(
|
|
192
|
+
f"[red]Error:[/] cannot write --output: "
|
|
193
|
+
f"{escape(type(exc).__name__)}: {escape(str(exc))}"
|
|
194
|
+
)
|
|
195
|
+
raise typer.Exit(code=1) from exc
|
|
196
|
+
|
|
197
|
+
if badge:
|
|
198
|
+
try:
|
|
199
|
+
svg = render_badge_svg(report)
|
|
200
|
+
_write_badge(badge, svg)
|
|
201
|
+
console.print(f"[green]Badge written[/] to {escape(badge)}")
|
|
202
|
+
except (OSError, ValueError, TypeError) as exc:
|
|
203
|
+
console.print(
|
|
204
|
+
f"[red]Error:[/] cannot write --badge: "
|
|
205
|
+
f"{escape(type(exc).__name__)}: {escape(str(exc))}"
|
|
206
|
+
)
|
|
207
|
+
raise typer.Exit(code=1) from exc
|
|
208
|
+
|
|
209
|
+
if attach_to_registry and output:
|
|
210
|
+
_attach_to_registry(report, attach_to_registry, output)
|
|
211
|
+
elif attach_to_registry and not output:
|
|
212
|
+
console.print(
|
|
213
|
+
"[yellow]Warning:[/] --attach-to-registry needs --output (skipped)."
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
|
|
176
217
|
def diagnose(
|
|
177
218
|
run_id: str = typer.Argument(..., help="Registry run id (or any opaque tag)."),
|
|
178
219
|
base: str = typer.Option("", "--base", help="Base model name (informational)."),
|
|
@@ -191,13 +232,65 @@ def diagnose(
|
|
|
191
232
|
attach_to_registry: Optional[str] = typer.Option(
|
|
192
233
|
None, "--attach-to-registry", help="Attach the report to a registry entry id."
|
|
193
234
|
),
|
|
235
|
+
base_model: Optional[str] = typer.Option(
|
|
236
|
+
None,
|
|
237
|
+
"--base-model",
|
|
238
|
+
help=(
|
|
239
|
+
"Base model id to LOAD for a live diagnose run (e.g. "
|
|
240
|
+
"HuggingFaceTB/SmolLM2-135M). When set, the 6 probes run live "
|
|
241
|
+
"against the model instead of emitting neutral scores."
|
|
242
|
+
),
|
|
243
|
+
),
|
|
244
|
+
dataset: Optional[str] = typer.Option(
|
|
245
|
+
None,
|
|
246
|
+
"--dataset",
|
|
247
|
+
help="Training JSONL for the live forgetting / format / memorization "
|
|
248
|
+
"probes (must stay under cwd).",
|
|
249
|
+
),
|
|
250
|
+
tokenizer: Optional[str] = typer.Option(
|
|
251
|
+
None,
|
|
252
|
+
"--tokenizer",
|
|
253
|
+
help="Tokenizer id/path for a sub-word memorization probe (live).",
|
|
254
|
+
),
|
|
255
|
+
device: Optional[str] = typer.Option(
|
|
256
|
+
None, "--device", help="Device for the live run (cuda / cpu)."
|
|
257
|
+
),
|
|
194
258
|
) -> None:
|
|
195
|
-
"""Compute a 6-mode FailureReport for a completed run.
|
|
259
|
+
"""Compute a 6-mode FailureReport for a completed run.
|
|
260
|
+
|
|
261
|
+
With ``--base-model`` the six probes run LIVE against the loaded model
|
|
262
|
+
(+ optional ``--adapter`` LoRA path, ``--dataset``, ``--tokenizer``).
|
|
263
|
+
Without it, scores come from ``--evidence`` JSON or default to neutral OK.
|
|
264
|
+
"""
|
|
196
265
|
if not isinstance(run_id, str) or not run_id.strip():
|
|
197
266
|
raise typer.BadParameter("run_id must be a non-empty string")
|
|
198
267
|
if "\x00" in run_id or len(run_id) > 512:
|
|
199
268
|
raise typer.BadParameter("run_id has a null byte or is too long")
|
|
200
269
|
|
|
270
|
+
if base_model is not None:
|
|
271
|
+
from soup_cli.utils.diagnose.live import run_live_diagnose
|
|
272
|
+
|
|
273
|
+
try:
|
|
274
|
+
report = run_live_diagnose(
|
|
275
|
+
run_id=run_id,
|
|
276
|
+
base=base_model,
|
|
277
|
+
adapter=adapter or None,
|
|
278
|
+
dataset_path=dataset,
|
|
279
|
+
device=device,
|
|
280
|
+
tokenizer=tokenizer,
|
|
281
|
+
soup_version=__version__,
|
|
282
|
+
)
|
|
283
|
+
except (ValueError, TypeError, OSError, RuntimeError) as exc:
|
|
284
|
+
console.print(
|
|
285
|
+
f"[red]Error:[/] live diagnose failed: "
|
|
286
|
+
f"{escape(type(exc).__name__)}: {escape(str(exc))}"
|
|
287
|
+
)
|
|
288
|
+
raise typer.Exit(code=1) from exc
|
|
289
|
+
_emit_report(report, output=output, badge=badge, attach_to_registry=attach_to_registry)
|
|
290
|
+
if report.overall == "MAJOR":
|
|
291
|
+
raise typer.Exit(code=2)
|
|
292
|
+
return
|
|
293
|
+
|
|
201
294
|
scores = {}
|
|
202
295
|
extras = {}
|
|
203
296
|
if evidence_path:
|
|
@@ -235,37 +328,7 @@ def diagnose(
|
|
|
235
328
|
soup_version=__version__,
|
|
236
329
|
extras=extras,
|
|
237
330
|
)
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
if output:
|
|
241
|
-
try:
|
|
242
|
-
write_report(report, output)
|
|
243
|
-
console.print(f"[green]Wrote[/] {escape(output)}")
|
|
244
|
-
except (OSError, ValueError) as exc:
|
|
245
|
-
console.print(
|
|
246
|
-
f"[red]Error:[/] cannot write --output: "
|
|
247
|
-
f"{escape(type(exc).__name__)}: {escape(str(exc))}"
|
|
248
|
-
)
|
|
249
|
-
raise typer.Exit(code=1) from exc
|
|
250
|
-
|
|
251
|
-
if badge:
|
|
252
|
-
try:
|
|
253
|
-
svg = render_badge_svg(report)
|
|
254
|
-
_write_badge(badge, svg)
|
|
255
|
-
console.print(f"[green]Badge written[/] to {escape(badge)}")
|
|
256
|
-
except (OSError, ValueError, TypeError) as exc:
|
|
257
|
-
console.print(
|
|
258
|
-
f"[red]Error:[/] cannot write --badge: "
|
|
259
|
-
f"{escape(type(exc).__name__)}: {escape(str(exc))}"
|
|
260
|
-
)
|
|
261
|
-
raise typer.Exit(code=1) from exc
|
|
262
|
-
|
|
263
|
-
if attach_to_registry and output:
|
|
264
|
-
_attach_to_registry(report, attach_to_registry, output)
|
|
265
|
-
elif attach_to_registry and not output:
|
|
266
|
-
console.print(
|
|
267
|
-
"[yellow]Warning:[/] --attach-to-registry needs --output (skipped)."
|
|
268
|
-
)
|
|
331
|
+
_emit_report(report, output=output, badge=badge, attach_to_registry=attach_to_registry)
|
|
269
332
|
|
|
270
333
|
if report.overall == "MAJOR":
|
|
271
334
|
raise typer.Exit(code=2)
|