soup-cli 0.71.6__tar.gz → 0.71.8__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.8}/CHANGELOG.md +80 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/CONTRIBUTING.md +1 -1
- {soup_cli-0.71.6 → soup_cli-0.71.8}/PKG-INFO +15 -15
- {soup_cli-0.71.6 → soup_cli-0.71.8}/README.md +14 -14
- {soup_cli-0.71.6 → soup_cli-0.71.8}/docs/commands.md +9 -3
- {soup_cli-0.71.6 → soup_cli-0.71.8}/docs/evaluation.md +41 -6
- {soup_cli-0.71.6 → soup_cli-0.71.8}/pyproject.toml +1 -1
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/cli.py +3 -2
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/_eval_v0650.py +114 -4
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/advise.py +40 -6
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/diagnose.py +101 -38
- soup_cli-0.71.8/src/soup_cli/commands/probe.py +738 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/train.py +139 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/tunability.py +32 -1
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/advise.py +151 -20
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/behavior_battery.py +55 -1
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/capability_suite.py +111 -1
- soup_cli-0.71.8/src/soup_cli/utils/diagnose/live.py +320 -0
- soup_cli-0.71.8/src/soup_cli/utils/harm_probe.py +149 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/hubs.py +93 -0
- soup_cli-0.71.8/src/soup_cli/utils/interference_live.py +163 -0
- soup_cli-0.71.8/src/soup_cli/utils/live_eval.py +612 -0
- soup_cli-0.71.8/src/soup_cli/utils/probe_kernel.py +520 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/probe_pack.py +28 -8
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/sae_diff.py +108 -27
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/sleeper_probe.py +92 -27
- soup_cli-0.71.8/src/soup_cli/utils/truth_probe.py +152 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/tunability.py +119 -1
- soup_cli-0.71.8/tests/test_v0717.py +869 -0
- soup_cli-0.71.8/tests/test_v0718.py +1545 -0
- soup_cli-0.71.6/src/soup_cli/commands/probe.py +0 -382
- {soup_cli-0.71.6 → soup_cli-0.71.8}/.dockerignore +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/.github/FUNDING.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/.github/pull_request_template.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/.gitignore +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/.mailmap +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/AGENTS.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/CODEOWNERS +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/CONTRIBUTORS.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/Dockerfile +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/LICENSE +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/NOTICE +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/SECURITY.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/docker-compose.yml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/docs/README.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/docs/adapters-and-governance.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/docs/backends-and-ops.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/docs/data.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/docs/models.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/docs/peft-and-efficiency.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/docs/performance-and-quantization.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/docs/serving-and-export.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/docs/training.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/examples/README.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/soup.png +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/soup_logo_svg.svg +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/adapters.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/data.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/serve.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/config/schema.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/loader.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/recipes/catalog.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/registry/store.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/grpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/ppo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/sft.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/ui/app.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/peft_wiring.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/rl_checkpoint.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/templates/chat.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/templates/code.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/templates/medical.yaml +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/__init__.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/conftest.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_adapters.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_audio.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_autopilot.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_bco.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_bench.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_callback.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_cans.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_chat.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_chat_template.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_cli.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_config.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_cost.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_curriculum.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_data.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_data_augment.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_data_sample.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_data_split.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_data_tools.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_diff.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_display.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_doctor.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_embedding.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_errors.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_eval.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_export.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_formats.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_generate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_gpu.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_grpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_infer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_init.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_ipo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_kto.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_loader.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_log_level.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_merge.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_migrate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_moe.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_orpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_packing.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_part_a_wave1.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_performance.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_ppo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_pretrain.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_profile.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_profiling.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_progress.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_push.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_qat.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_quant_check.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_quickstart.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_recipes.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_registry.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_relora.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_replay.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_resume.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_rlvr.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_run_cost.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_runs.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_serve.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_server_generate.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_simpo.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_sweep.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_tracker.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_training_speed.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_tui.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_ui.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_unsloth.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0420.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0450.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0490.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0510.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0520.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0530.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v05310.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v05311.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0532.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0533.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0534.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0535.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0536.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0537.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0538.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0539.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0540.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0550.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0560.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0580.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0590.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0712.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0713.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0714.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0715.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_v0716.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_validator.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_vision.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_why.py +0 -0
- {soup_cli-0.71.6 → soup_cli-0.71.8}/tests/test_windows_encoding.py +0 -0
|
@@ -12,6 +12,86 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.71.8] - 2026-06-03
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- **Probes & SAE — real weights + live downloads** (closes #215, #216, #217,
|
|
19
|
+
#218, #219). A new shared `soup_cli/utils/probe_kernel.py` provides the
|
|
20
|
+
linear-probe math (contrast-pair derivation, apply, flag-rate, verdict bands,
|
|
21
|
+
operator-supplied weight loading, deterministic synthetic fallback); every
|
|
22
|
+
heavy import (`numpy` / `torch` / `safetensors`) is lazy.
|
|
23
|
+
- **`soup probe sleeper --weights <w.npz|.npy|.safetensors>`** (#215) — load a
|
|
24
|
+
real calibrated probe direction instead of the synthetic fallback. Weights are
|
|
25
|
+
cwd-contained, symlink-rejected, `O_NOFOLLOW`-opened, `allow_pickle=False`,
|
|
26
|
+
and size-capped. `compute_contrast_probe(positive, negative)` derives a probe
|
|
27
|
+
from contrast-pair activations.
|
|
28
|
+
- **`soup probe sae-diff <repo> --auto-download`** (#216) — fetch an
|
|
29
|
+
allowlisted SAE from the HF Hub into `~/.soup/sae-cache/` (validated against
|
|
30
|
+
`HF_HUB_ALLOWLIST` BEFORE any network call) via a new SSRF-hardened
|
|
31
|
+
`soup_cli.utils.hubs.snapshot_download` (repo-id shape + home/cwd/tmp cache
|
|
32
|
+
containment + namespace-pin TOFU gate).
|
|
33
|
+
- **`soup probe truth` / `soup probe harm`** (#217) — TruthfulQA-style honesty
|
|
34
|
+
and HarmBench-style misuse activation probes (6 bundled bases each, 5% / 20%
|
|
35
|
+
verdict bands, `--weights` to skip the allowlist with a real probe). The
|
|
36
|
+
probe pack now ships truth + harm entries per base.
|
|
37
|
+
- **`soup probe interference --measure <eval_suite> --base-model <m> --adapter
|
|
38
|
+
name=path ...`** (#218) — auto-measure the N×N interference matrix by actually
|
|
39
|
+
loading the base + each LoRA adapter (PEFT multi-adapter), measuring loss for
|
|
40
|
+
each adapter alone (diagonal) and each co-loaded pair
|
|
41
|
+
(`add_weighted_adapter(combination_type="cat")`, off-diagonal). Exit 2 on a
|
|
42
|
+
MAJOR worst-pair.
|
|
43
|
+
- **`soup train --capture-activations <layer> --capture-prompts <jsonl>`** (#219)
|
|
44
|
+
— a post-training hook writes an SAE-diff-ready per-token activation snapshot
|
|
45
|
+
to `<output>/activations/activations.json`. `resolve_layer_module` resolves
|
|
46
|
+
the same `model.layers.N` path whether or not a LoRA adapter is loaded
|
|
47
|
+
(PEFT-wrapper fallback).
|
|
48
|
+
|
|
49
|
+
### Security
|
|
50
|
+
- Probe / SAE / capture file I/O is cwd-contained + `O_NOFOLLOW` (TOCTOU close)
|
|
51
|
+
+ size-capped; SAE weight loads use `allow_pickle=False`. SAE auto-download
|
|
52
|
+
validates the allowlist before any network call and rejects a glob result
|
|
53
|
+
that resolves outside the snapshot dir (symlink-escape guard).
|
|
54
|
+
|
|
55
|
+
### Notes
|
|
56
|
+
- #215 is partial: the operator-supplied / contrast-pair / synthetic paths ship
|
|
57
|
+
now, but the 6 large-base Anthropic-calibrated probe vectors remain
|
|
58
|
+
upstream-gated (no public calibrated artifact exists). Documented as a known
|
|
59
|
+
limitation.
|
|
60
|
+
|
|
61
|
+
## [0.71.7] - 2026-06-02
|
|
62
|
+
|
|
63
|
+
### Added
|
|
64
|
+
- **Eval live runners** — six probe surfaces that previously emitted heuristic
|
|
65
|
+
/ neutral stubs now load a real model and run live (closes #161, #162, #208,
|
|
66
|
+
#211, #212, #165). New shared `soup_cli/utils/live_eval.py` provides the
|
|
67
|
+
model-loading primitives (generator / multi-generator closures, masked
|
|
68
|
+
cross-entropy eval-loss, a short-LoRA probe, and held-out logit agreement);
|
|
69
|
+
every heavy import (`torch` / `transformers` / `peft` / `lm_eval`) is lazy.
|
|
70
|
+
- **`soup advise --probe-model <id>`** — runs a LIVE ROI probe: zero/few-shot
|
|
71
|
+
token-F1 baselines, a short LoRA probe (relative held-out-loss improvement +
|
|
72
|
+
real wall-clock), and base-model proximity (held-out logit agreement) folded
|
|
73
|
+
into the dataset profile. Without `--probe-model`, `--probe` stays the offline
|
|
74
|
+
heuristic.
|
|
75
|
+
- **`soup tunability --live`** — replaces the offline heuristic with a real
|
|
76
|
+
per-candidate LoRA probe (loads each `repo_id`, trains `--probe-steps` on a
|
|
77
|
+
held-out-excluded slice, reports the held-out-loss drop).
|
|
78
|
+
- **`soup eval capability --live --model <id>`** — invokes lm-eval-harness per
|
|
79
|
+
resolved task (or a `--tasks` override) with `--limit` / `--device`, isolating
|
|
80
|
+
per-task failures and surfacing a no-metric result as an explicit error.
|
|
81
|
+
- **`soup eval behavior --base-model <id> [--adapter <path>]`** — generates
|
|
82
|
+
pre/post responses on the bundled behaviour battery and scores the live diff.
|
|
83
|
+
- **`soup diagnose --base-model <id> [--adapter <path>] [--dataset <jsonl>]
|
|
84
|
+
[--tokenizer <id>]`** — runs all six failure-mode probes (forgetting / refusal
|
|
85
|
+
/ format / mode_collapse / memorization / contamination) live via
|
|
86
|
+
`soup_cli.utils.diagnose.live.run_live_diagnose`; falls back to neutral OK or
|
|
87
|
+
`--evidence` JSON when no model is supplied.
|
|
88
|
+
|
|
89
|
+
### Security
|
|
90
|
+
- The two new JSONL dataset readers (`diagnose.live._load_dataset_rows`,
|
|
91
|
+
`tunability._load_jsonl_rows`) open with `O_NOFOLLOW` after the cwd-containment
|
|
92
|
+
check, closing the check→open TOCTOU window (matches the v0.65 / v0.67 reader
|
|
93
|
+
policy).
|
|
94
|
+
|
|
15
95
|
## [0.71.6] - 2026-06-02
|
|
16
96
|
|
|
17
97
|
### 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 (278 files, 12917 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.8
|
|
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,20 @@ 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.8 — Probes & SAE.** The activation-probe surfaces ship real weights, live SAE downloads,
|
|
187
|
+
and an end-to-end capture → diff pipeline:
|
|
188
|
+
|
|
189
|
+
- **`soup probe truth` / `soup probe harm`** — TruthfulQA-style honesty and HarmBench-style misuse
|
|
190
|
+
activation probes (6 bundled bases each, 5% / 20% verdict bands). `--weights` loads a real
|
|
191
|
+
calibrated probe; without it the bundled deterministic fallback is used.
|
|
192
|
+
- **`soup probe sleeper --weights <w.npz|.npy|.safetensors>`** — load a real calibrated sleeper
|
|
193
|
+
probe direction instead of the synthetic fallback (cwd-contained, `allow_pickle=False`).
|
|
194
|
+
- **`soup probe sae-diff <repo> --auto-download`** — fetch an allowlisted SAE from the HF Hub into
|
|
195
|
+
`~/.soup/sae-cache/` (validated before any network call) and diff pre/post activations.
|
|
196
|
+
- **`soup probe interference --measure <eval.jsonl> --base-model <m> --adapter a=path ...`** —
|
|
197
|
+
auto-measure the N×N adapter-interference matrix by actually loading the base + each LoRA adapter.
|
|
198
|
+
- **`soup train --capture-activations <layer> --capture-prompts <jsonl>`** — a post-training hook
|
|
199
|
+
writes an SAE-diff-ready per-token activation snapshot. Validated end-to-end on SmolLM2-135M.
|
|
200
200
|
|
|
201
201
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
202
202
|
|
|
@@ -49,20 +49,20 @@ 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.8 — Probes & SAE.** The activation-probe surfaces ship real weights, live SAE downloads,
|
|
53
|
+
and an end-to-end capture → diff pipeline:
|
|
54
|
+
|
|
55
|
+
- **`soup probe truth` / `soup probe harm`** — TruthfulQA-style honesty and HarmBench-style misuse
|
|
56
|
+
activation probes (6 bundled bases each, 5% / 20% verdict bands). `--weights` loads a real
|
|
57
|
+
calibrated probe; without it the bundled deterministic fallback is used.
|
|
58
|
+
- **`soup probe sleeper --weights <w.npz|.npy|.safetensors>`** — load a real calibrated sleeper
|
|
59
|
+
probe direction instead of the synthetic fallback (cwd-contained, `allow_pickle=False`).
|
|
60
|
+
- **`soup probe sae-diff <repo> --auto-download`** — fetch an allowlisted SAE from the HF Hub into
|
|
61
|
+
`~/.soup/sae-cache/` (validated before any network call) and diff pre/post activations.
|
|
62
|
+
- **`soup probe interference --measure <eval.jsonl> --base-model <m> --adapter a=path ...`** —
|
|
63
|
+
auto-measure the N×N adapter-interference matrix by actually loading the base + each LoRA adapter.
|
|
64
|
+
- **`soup train --capture-activations <layer> --capture-prompts <jsonl>`** — a post-training hook
|
|
65
|
+
writes an SAE-diff-ready per-token activation snapshot. Validated end-to-end on SmolLM2-135M.
|
|
66
66
|
|
|
67
67
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
68
68
|
|
|
@@ -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)
|
|
@@ -188,10 +189,15 @@ soup completions bash | zsh | fish Shell completion script
|
|
|
188
189
|
soup license-advisor --target b2c|defense|embedded Recommend license-clean base for deploy target
|
|
189
190
|
soup license-advisor ... --license <id> --mau N Per-license downstream-risk check (exit 3 on block)
|
|
190
191
|
soup probe sae-diff <sae> <pre.json> <post.json> [--top-k N] SAE feature diff between pre/post-FT activations (v0.66.0)
|
|
191
|
-
soup probe
|
|
192
|
+
soup probe sae-diff <repo> <pre.json> <post.json> --auto-download Fetch an allowlisted SAE into ~/.soup/sae-cache (v0.71.8)
|
|
193
|
+
soup probe sleeper <base> [--evidence ev.json] [--weights w.npz] [--output o.json] Sleeper-agent defection probe; --weights = real calibrated probe (v0.66.0; v0.71.8)
|
|
194
|
+
soup probe truth <base> [--evidence ev.json] [--weights w.npz] [--output o.json] TruthfulQA-style honesty probe (v0.71.8)
|
|
195
|
+
soup probe harm <base> [--evidence ev.json] [--weights w.npz] [--output o.json] HarmBench-style misuse probe (v0.71.8)
|
|
192
196
|
soup probe interference <losses.json> [--output o.json] Pairwise N×N adapter interference matrix (exit 2 on MAJOR; v0.66.0)
|
|
193
|
-
soup probe
|
|
197
|
+
soup probe interference --measure <eval.jsonl> --base-model <m> --adapter name=path ... [--device cpu] Auto-measure live interference (v0.71.8)
|
|
198
|
+
soup probe pack <base> [--output o.json] Per-base calibrated probe pack manifest (v0.66.0; +truth/harm v0.71.8)
|
|
194
199
|
soup probe pack --list List bundled probe-pack bases (v0.66.0)
|
|
200
|
+
soup train --capture-activations <layer> --capture-prompts <jsonl> Post-train SAE-diff-ready per-token activation snapshot (v0.71.8)
|
|
195
201
|
soup adapters blame ... --top-k 50 Live DataInf-style influence runner (v0.66.0, closes #171)
|
|
196
202
|
soup adapters merge ... --strategy cmaes --eval <s> --budget 1h CMA-ES evolutionary merge — live loop (v0.67.0 schema / v0.71.4 live)
|
|
197
203
|
soup adapters merge ... --canary <suite.json> [--strict-verdict] Live OK/MINOR/MAJOR canary verdict, exit 2 on MAJOR (v0.71.4)
|
|
@@ -37,16 +37,29 @@ soup adapters blame ./my-adapter --dataset ./train.jsonl --layer q_proj.7 \
|
|
|
37
37
|
|
|
38
38
|
# 3. Sleeper-agent defection probe: per-token defection rate via calibrated linear probe
|
|
39
39
|
soup probe sleeper meta-llama/Llama-3-8B --evidence activations.json
|
|
40
|
+
soup probe sleeper my/model --weights probe.npz --evidence activations.json # real calibrated probe (v0.71.8)
|
|
41
|
+
|
|
42
|
+
# 3b. Honesty + misuse probes (v0.71.8) — same shape, 5% / 20% verdict bands
|
|
43
|
+
soup probe truth meta-llama/Llama-3-8B --evidence activations.json
|
|
44
|
+
soup probe harm meta-llama/Llama-3-8B --evidence activations.json
|
|
40
45
|
|
|
41
46
|
# 4. Pairwise adapter interference matrix: which pairs can't be deployed together?
|
|
42
47
|
soup probe interference losses.json # exit 2 if worst-pair score ≥ 20%
|
|
48
|
+
# v0.71.8: auto-measure the matrix live instead of supplying losses.json
|
|
49
|
+
soup probe interference --measure eval.jsonl --base-model meta-llama/Llama-3-8B \
|
|
50
|
+
--adapter a=./adapter-a --adapter b=./adapter-b --device cpu
|
|
43
51
|
|
|
44
|
-
# 5. Probe pack: list/assemble calibrated probes per base
|
|
52
|
+
# 5. Probe pack: list/assemble calibrated probes per base (sleeper + truth + harm per base)
|
|
45
53
|
soup probe pack --list # list bundled bases
|
|
46
54
|
soup probe pack meta-llama/Llama-3-8B # render the per-base manifest
|
|
55
|
+
|
|
56
|
+
# 6. SAE auto-download + capture pipeline (v0.71.8)
|
|
57
|
+
soup train --config soup.yaml --capture-activations model.layers.5 \
|
|
58
|
+
--capture-prompts probes.jsonl # writes <output>/activations/activations.json
|
|
59
|
+
soup probe sae-diff google/gemma-scope-2b-pt-res pre.json post.json --auto-download
|
|
47
60
|
```
|
|
48
61
|
|
|
49
|
-
Every probe uses the OK / MINOR / MAJOR taxonomy from v0.26 (Quant-Lobotomy) / v0.56 (Diagnose) / v0.65 (Eval Depth). Sleeper
|
|
62
|
+
Every probe uses the OK / MINOR / MAJOR taxonomy from v0.26 (Quant-Lobotomy) / v0.56 (Diagnose) / v0.65 (Eval Depth). Sleeper / truth / harm / interference exit 2 on MAJOR for CI gating. **v0.71.8** ships real probe weights: `--weights <w.npz|.npy|.safetensors>` loads a calibrated direction (cwd-contained, `O_NOFOLLOW`, `allow_pickle=False`, size-capped); `compute_contrast_probe(positive, negative)` derives one from contrast-pair activations; the bundled specs fall back to a deterministic synthetic seed (the large-base Anthropic-calibrated vectors remain upstream-gated). `soup probe interference --measure` loads the base + each LoRA adapter via PEFT and measures loss per adapter alone (diagonal) and per co-loaded pair (`add_weighted_adapter(combination_type="cat")`, off-diagonal). `soup train --capture-activations` writes an SAE-diff-ready per-token snapshot (the `model.layers.N` path resolves whether or not a LoRA adapter is loaded). The blame runner closes the v0.57 `NotImplementedError` stub via a DataInf-style influence approximation: `cos(grad_row, grad_probe) × |grad_row|`. Operators supply a `probe_fn` returning `(row_grads, probe_grad)`, or the runner falls back to a deterministic synthetic probe so the surface always returns a real `BlameResult` (no exception leaks). SAE feature diff is pure-numpy; the safetensors loader is `O_NOFOLLOW`-protected (TOCTOU defence — closes the symlink swap window between containment check and read); `--auto-download` validates the `HF_HUB_ALLOWLIST` before any network call and rejects a glob result escaping the snapshot dir.
|
|
50
63
|
|
|
51
64
|
|
|
52
65
|
## Pre-flight Decision (`soup advise`)
|
|
@@ -61,9 +74,13 @@ soup advise data.jsonl --goal "make our chatbot more concise"
|
|
|
61
74
|
# Why: Task is summarization with 120 rows and healthy diversity ...
|
|
62
75
|
# Flip when: the prompt-engineering baseline already meets your target ...
|
|
63
76
|
|
|
64
|
-
# Optional
|
|
77
|
+
# Optional ROI probe (offline heuristic: zero/few-shot + RAG + LoRA estimate).
|
|
65
78
|
soup advise data.jsonl --goal "summarize my reports" --probe
|
|
66
79
|
|
|
80
|
+
# LIVE ROI probe (v0.71.7): loads the model for zero/few-shot token-F1, a short
|
|
81
|
+
# LoRA probe, and base-model proximity (held-out logit agreement). Implies --probe.
|
|
82
|
+
soup advise data.jsonl --goal "..." --probe-model HuggingFaceTB/SmolLM2-135M
|
|
83
|
+
|
|
67
84
|
# Print the rubric / evidence trail of the last verdict.
|
|
68
85
|
soup advise explain
|
|
69
86
|
|
|
@@ -239,9 +256,13 @@ Default threshold 0.2 matches v0.43.0 KL-delta quant-check thresholds. Webhooks
|
|
|
239
256
|
`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
257
|
|
|
241
258
|
```bash
|
|
242
|
-
#
|
|
259
|
+
# Neutral report (no model load — runs as a sanity check)
|
|
243
260
|
soup diagnose my-run-id
|
|
244
261
|
|
|
262
|
+
# LIVE (v0.71.7): load the model and run all six probes for real
|
|
263
|
+
soup diagnose my-run-id --base-model HuggingFaceTB/SmolLM2-135M \
|
|
264
|
+
--adapter ./out --dataset train.jsonl --tokenizer HuggingFaceTB/SmolLM2-135M
|
|
265
|
+
|
|
245
266
|
# Compute scores from a pre-built evidence JSON
|
|
246
267
|
soup diagnose my-run-id --evidence evidence.json --output diag.json
|
|
247
268
|
|
|
@@ -252,6 +273,12 @@ soup diagnose my-run-id --badge diag.svg
|
|
|
252
273
|
soup diagnose my-run-id --output diag.json --attach-to-registry abc123
|
|
253
274
|
```
|
|
254
275
|
|
|
276
|
+
**Live runners (v0.71.7).** With `--base-model` the six probes run against the loaded model
|
|
277
|
+
(+ optional `--adapter` LoRA path, `--dataset` for the forgetting / format / memorization probes,
|
|
278
|
+
`--tokenizer` for a sub-word memorization variant) instead of emitting neutral OK. `refusal` uses
|
|
279
|
+
a built-in probe set; `format` only fires when the dataset's own targets look like JSON;
|
|
280
|
+
`contamination` stays neutral unless a benchmark corpus is supplied. Validated on SmolLM2-135M.
|
|
281
|
+
|
|
255
282
|
**Six failure-mode probes:**
|
|
256
283
|
|
|
257
284
|
| Mode | What it catches | Score range |
|
|
@@ -429,7 +456,7 @@ soup tunability --dataset ./eval.jsonl --candidates qwen3-0.6b,phi-4-mini --plan
|
|
|
429
456
|
soup tunability --dataset ./eval.jsonl --probe-steps 100 --output ./tunability.json
|
|
430
457
|
```
|
|
431
458
|
|
|
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.
|
|
459
|
+
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
460
|
|
|
434
461
|
|
|
435
462
|
## Eval Depth (`soup eval behavior / capability / checklist / irt-subset`)
|
|
@@ -459,6 +486,10 @@ Persist a calibration once and reuse it across runs (v0.71.1): `write_judge_cali
|
|
|
459
486
|
# Score over-refusal regression on XSTest (operator supplies evidence JSON)
|
|
460
487
|
soup eval behavior my_run --battery xstest --evidence ev.json --output diff.json
|
|
461
488
|
|
|
489
|
+
# LIVE (v0.71.7): generate pre/post responses on the bundled battery + score the diff
|
|
490
|
+
soup eval behavior my_run --battery xstest \
|
|
491
|
+
--base-model HuggingFaceTB/SmolLM2-135M --adapter ./out
|
|
492
|
+
|
|
462
493
|
# Bundled batteries: xstest, harmbench, jailbreakbench, elephant, syceval
|
|
463
494
|
# Harmful prompts ship REDACTED — pull real sets from upstream papers.
|
|
464
495
|
```
|
|
@@ -472,9 +503,13 @@ soup eval capability my_run --suite math --output cap.json # AIME + MATH-500
|
|
|
472
503
|
soup eval capability my_run --suite code --output cap.json # HumanEval+ + SWE-bench-Verified
|
|
473
504
|
soup eval capability my_run --suite fast --output cap.json # MMLU-Pro + HumanEval+
|
|
474
505
|
soup eval capability my_run --suite full --output cap.json # all 7 benchmarks
|
|
506
|
+
|
|
507
|
+
# LIVE (v0.71.7): invoke lm-eval-harness per task against a real model
|
|
508
|
+
soup eval capability my_run --live --model HuggingFaceTB/SmolLM2-135M \
|
|
509
|
+
--tasks arc_easy --limit 1 --device cpu
|
|
475
510
|
```
|
|
476
511
|
|
|
477
|
-
|
|
512
|
+
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
513
|
|
|
479
514
|
**CheckList behavioural DSL** — Ribeiro et al. 2020 MFT / INV / DIR tests:
|
|
480
515
|
|
|
@@ -410,8 +410,9 @@ app.add_typer(
|
|
|
410
410
|
_probe_cmd.app,
|
|
411
411
|
name="probe",
|
|
412
412
|
help=(
|
|
413
|
-
"Activation probes: sleeper-agent defection /
|
|
414
|
-
"/ SAE feature diff / probe pack (v0.66.0
|
|
413
|
+
"Activation probes: sleeper-agent defection / honesty / misuse / "
|
|
414
|
+
"pairwise interference / SAE feature diff / probe pack (v0.66.0, "
|
|
415
|
+
"truth+harm v0.71.8)."
|
|
415
416
|
),
|
|
416
417
|
)
|
|
417
418
|
|
|
@@ -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
|