soup-cli 0.71.7__tar.gz → 0.71.9__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.7 → soup_cli-0.71.9}/CHANGELOG.md +93 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/CONTRIBUTING.md +1 -1
- {soup_cli-0.71.7 → soup_cli-0.71.9}/PKG-INFO +15 -17
- {soup_cli-0.71.7 → soup_cli-0.71.9}/README.md +14 -16
- {soup_cli-0.71.7 → soup_cli-0.71.9}/docs/adapters-and-governance.md +14 -9
- {soup_cli-0.71.7 → soup_cli-0.71.9}/docs/commands.md +10 -4
- {soup_cli-0.71.7 → soup_cli-0.71.9}/docs/evaluation.md +15 -2
- {soup_cli-0.71.7 → soup_cli-0.71.9}/docs/training.md +8 -3
- {soup_cli-0.71.7 → soup_cli-0.71.9}/pyproject.toml +1 -1
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/cli.py +3 -2
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/edit.py +121 -22
- soup_cli-0.71.9/src/soup_cli/commands/probe.py +738 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/train.py +144 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/registry/store.py +3 -0
- soup_cli-0.71.9/src/soup_cli/trainer/unlearn.py +443 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/edit_diff.py +87 -18
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/edit_governor.py +258 -1
- soup_cli-0.71.9/src/soup_cli/utils/edit_kernels.py +399 -0
- soup_cli-0.71.9/src/soup_cli/utils/grace_codebook.py +462 -0
- soup_cli-0.71.9/src/soup_cli/utils/harm_probe.py +149 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/hubs.py +93 -0
- soup_cli-0.71.9/src/soup_cli/utils/interference_live.py +163 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/knowledge_edit.py +115 -13
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/live_eval.py +148 -0
- soup_cli-0.71.9/src/soup_cli/utils/probe_kernel.py +520 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/probe_pack.py +28 -8
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/sae_diff.py +108 -27
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/sleeper_probe.py +92 -27
- soup_cli-0.71.9/src/soup_cli/utils/truth_probe.py +152 -0
- soup_cli-0.71.9/src/soup_cli/utils/unlearn_kernels.py +115 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/unlearning.py +16 -12
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0610_part_a.py +26 -9
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0610_part_c.py +57 -11
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0620_followups.py +31 -14
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0620_part_e.py +21 -7
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0717.py +2 -1
- soup_cli-0.71.9/tests/test_v0718.py +1545 -0
- soup_cli-0.71.9/tests/test_v0719.py +946 -0
- soup_cli-0.71.7/src/soup_cli/commands/probe.py +0 -382
- soup_cli-0.71.7/src/soup_cli/trainer/unlearn.py +0 -90
- soup_cli-0.71.7/src/soup_cli/utils/grace_codebook.py +0 -102
- {soup_cli-0.71.7 → soup_cli-0.71.9}/.dockerignore +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/.github/FUNDING.yml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/.github/pull_request_template.md +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/.gitignore +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/.mailmap +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/AGENTS.md +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/CODEOWNERS +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/CONTRIBUTORS.md +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/Dockerfile +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/LICENSE +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/NOTICE +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/SECURITY.md +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/docker-compose.yml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/docs/README.md +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/docs/backends-and-ops.md +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/docs/data.md +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/docs/models.md +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/docs/peft-and-efficiency.md +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/docs/performance-and-quantization.md +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/docs/serving-and-export.md +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/examples/README.md +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/soup.png +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/soup_logo_svg.svg +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/_eval_v0650.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/adapters.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/advise.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/data.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/diagnose.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/serve.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/config/schema.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/loader.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/recipes/catalog.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/grpo.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/ppo.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/sft.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/ui/app.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/advise.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/live.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/peft_wiring.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/rl_checkpoint.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/templates/chat.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/templates/code.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/templates/medical.yaml +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/__init__.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/conftest.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_adapters.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_audio.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_autopilot.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_bco.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_bench.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_callback.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_cans.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_chat.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_chat_template.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_cli.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_config.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_cost.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_curriculum.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_data.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_data_augment.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_data_sample.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_data_split.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_data_tools.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_diff.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_display.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_doctor.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_embedding.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_errors.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_eval.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_export.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_formats.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_generate.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_gpu.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_grpo.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_infer.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_init.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_ipo.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_kto.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_loader.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_log_level.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_merge.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_migrate.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_moe.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_orpo.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_packing.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_part_a_wave1.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_part_d.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_part_e.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_performance.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_ppo.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_pretrain.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_profile.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_profiling.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_progress.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_push.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_qat.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_quant_check.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_quickstart.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_recipes.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_registry.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_relora.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_replay.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_resume.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_rlvr.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_run_cost.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_runs.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_serve.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_server_generate.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_simpo.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_sweep.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_tracker.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_training_speed.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_tui.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_ui.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_unsloth.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0420.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0450.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0490.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0510.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0520.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0530.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v05310.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v05311.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0532.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0533.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0534.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0535.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0536.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0537.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0538.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0539.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0540.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0550.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0560.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0580.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0590.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0712.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0713.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0714.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0715.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_v0716.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_validator.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_vision.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_why.py +0 -0
- {soup_cli-0.71.7 → soup_cli-0.71.9}/tests/test_windows_encoding.py +0 -0
|
@@ -12,6 +12,99 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.71.9] - 2026-06-03
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- **Knowledge edit + unlearn — live wiring** (closes #193, #194, #196, #197,
|
|
19
|
+
#203). The v0.61.0 / v0.62.0 schema-only stubs are now live, validated on
|
|
20
|
+
SmolLM2-135M.
|
|
21
|
+
- **`soup edit set` (ROME / MEMIT / AlphaEdit) is live** (#194). New
|
|
22
|
+
`soup_cli/utils/edit_kernels.py` ships covariance-free rank-1 weight-edit
|
|
23
|
+
kernels: ROME (single-layer `W += δ·kᵀ/‖k‖²`), MEMIT (residual distributed
|
|
24
|
+
across a layer band), AlphaEdit (ROME update projected orthogonal to the
|
|
25
|
+
down-proj's top singular direction). `apply_edit` loads the model, optimises
|
|
26
|
+
the target residual, applies the rank-1 update, and optionally saves with
|
|
27
|
+
cwd-containment + symlink rejection. `--output`, `--device`, `--governor/
|
|
28
|
+
--no-governor` flags added. On a tiny model a ROME edit moved
|
|
29
|
+
`P("Lyon" | "The capital of France is")` from 0.0016 → 0.96.
|
|
30
|
+
- **`soup edit diff` live before/after generation** (#194). Pass
|
|
31
|
+
`--before-model` + `--after-model` (+ `--probes`) to generate completions
|
|
32
|
+
through both models and surface the probes whose output changed.
|
|
33
|
+
- **EditGovernor SQLite persistence + cross-process locking** (#196). New
|
|
34
|
+
`EditGovernorStore` (mirrors `namespace_pin.NamespacePinStore` —
|
|
35
|
+
$HOME/$CWD/$TMPDIR containment, TOCTOU symlink rejection, WAL +
|
|
36
|
+
busy_timeout, `fcntl`/`msvcrt` sidecar lock, POSIX 0600). `save_governor` /
|
|
37
|
+
`load_governor` / `default_governor_db_path` (env override
|
|
38
|
+
`SOUP_EDIT_GOVERNOR_DB`) persist per-base-model edit-count + verdict across
|
|
39
|
+
separate `soup edit set` runs.
|
|
40
|
+
- **`apply_edit` consults the EditGovernor automatically** (#197). When a
|
|
41
|
+
governor is supplied, `check_can_edit()` runs BEFORE the model load (refusing
|
|
42
|
+
on norm blowup / edit cap) and `record_edit()` runs AFTER with the measured
|
|
43
|
+
Frobenius delta.
|
|
44
|
+
- **Live GRACE codebook** (#203). `GraceCodebook` (epsilon-ball nearest-key
|
|
45
|
+
lookup), `apply_grace_edit` (captures a residual key + optimises a value +
|
|
46
|
+
appends to a codebook sidecar), `save_codebook` / `load_codebook` (atomic,
|
|
47
|
+
cwd-contained, symlink-rejected), `install_grace_hook` (decode-time residual
|
|
48
|
+
substitution). New `edited_model` / `grace_codebook` Registry artifact kinds.
|
|
49
|
+
- **`soup train --task unlearn` is live (NPO / SimNPO / RMU)** (#193). New
|
|
50
|
+
`soup_cli/utils/unlearn_kernels.py` (NPO `(2/β)·mean(-logσ(-β(πlp-reflp)))`,
|
|
51
|
+
length-normalised SimNPO, RMU representation steering) + a self-contained
|
|
52
|
+
`UnlearnTrainerWrapper` loop loading a LoRA policy, a frozen reference
|
|
53
|
+
(NPO/RMU), and forget/retain JSONL datasets. NPO/SimNPO forget loss
|
|
54
|
+
decreased on the tiny-model smoke. Warns when run without a retain set.
|
|
55
|
+
|
|
56
|
+
### Security
|
|
57
|
+
- `_save_edited_model` / `UnlearnTrainerWrapper` output dirs + `save_codebook`
|
|
58
|
+
/ `load_codebook` + `_load_unlearn_rows` enforce cwd-containment, raw-path
|
|
59
|
+
symlink rejection (TOCTOU), null-byte rejection, and file-size / per-line
|
|
60
|
+
caps. `apply_grace_edit` honours the governor for direct callers.
|
|
61
|
+
|
|
62
|
+
## [0.71.8] - 2026-06-03
|
|
63
|
+
|
|
64
|
+
### Added
|
|
65
|
+
- **Probes & SAE — real weights + live downloads** (closes #215, #216, #217,
|
|
66
|
+
#218, #219). A new shared `soup_cli/utils/probe_kernel.py` provides the
|
|
67
|
+
linear-probe math (contrast-pair derivation, apply, flag-rate, verdict bands,
|
|
68
|
+
operator-supplied weight loading, deterministic synthetic fallback); every
|
|
69
|
+
heavy import (`numpy` / `torch` / `safetensors`) is lazy.
|
|
70
|
+
- **`soup probe sleeper --weights <w.npz|.npy|.safetensors>`** (#215) — load a
|
|
71
|
+
real calibrated probe direction instead of the synthetic fallback. Weights are
|
|
72
|
+
cwd-contained, symlink-rejected, `O_NOFOLLOW`-opened, `allow_pickle=False`,
|
|
73
|
+
and size-capped. `compute_contrast_probe(positive, negative)` derives a probe
|
|
74
|
+
from contrast-pair activations.
|
|
75
|
+
- **`soup probe sae-diff <repo> --auto-download`** (#216) — fetch an
|
|
76
|
+
allowlisted SAE from the HF Hub into `~/.soup/sae-cache/` (validated against
|
|
77
|
+
`HF_HUB_ALLOWLIST` BEFORE any network call) via a new SSRF-hardened
|
|
78
|
+
`soup_cli.utils.hubs.snapshot_download` (repo-id shape + home/cwd/tmp cache
|
|
79
|
+
containment + namespace-pin TOFU gate).
|
|
80
|
+
- **`soup probe truth` / `soup probe harm`** (#217) — TruthfulQA-style honesty
|
|
81
|
+
and HarmBench-style misuse activation probes (6 bundled bases each, 5% / 20%
|
|
82
|
+
verdict bands, `--weights` to skip the allowlist with a real probe). The
|
|
83
|
+
probe pack now ships truth + harm entries per base.
|
|
84
|
+
- **`soup probe interference --measure <eval_suite> --base-model <m> --adapter
|
|
85
|
+
name=path ...`** (#218) — auto-measure the N×N interference matrix by actually
|
|
86
|
+
loading the base + each LoRA adapter (PEFT multi-adapter), measuring loss for
|
|
87
|
+
each adapter alone (diagonal) and each co-loaded pair
|
|
88
|
+
(`add_weighted_adapter(combination_type="cat")`, off-diagonal). Exit 2 on a
|
|
89
|
+
MAJOR worst-pair.
|
|
90
|
+
- **`soup train --capture-activations <layer> --capture-prompts <jsonl>`** (#219)
|
|
91
|
+
— a post-training hook writes an SAE-diff-ready per-token activation snapshot
|
|
92
|
+
to `<output>/activations/activations.json`. `resolve_layer_module` resolves
|
|
93
|
+
the same `model.layers.N` path whether or not a LoRA adapter is loaded
|
|
94
|
+
(PEFT-wrapper fallback).
|
|
95
|
+
|
|
96
|
+
### Security
|
|
97
|
+
- Probe / SAE / capture file I/O is cwd-contained + `O_NOFOLLOW` (TOCTOU close)
|
|
98
|
+
+ size-capped; SAE weight loads use `allow_pickle=False`. SAE auto-download
|
|
99
|
+
validates the allowlist before any network call and rejects a glob result
|
|
100
|
+
that resolves outside the snapshot dir (symlink-escape guard).
|
|
101
|
+
|
|
102
|
+
### Notes
|
|
103
|
+
- #215 is partial: the operator-supplied / contrast-pair / synthetic paths ship
|
|
104
|
+
now, but the 6 large-base Anthropic-calibrated probe vectors remain
|
|
105
|
+
upstream-gated (no public calibrated artifact exists). Documented as a known
|
|
106
|
+
limitation.
|
|
107
|
+
|
|
15
108
|
## [0.71.7] - 2026-06-02
|
|
16
109
|
|
|
17
110
|
### 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 (279 files, 12998 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.9
|
|
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,22 +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
|
-
- **`soup
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
- **`soup
|
|
193
|
-
|
|
194
|
-
- **`soup
|
|
195
|
-
|
|
196
|
-
-
|
|
197
|
-
|
|
198
|
-
- **`soup
|
|
199
|
-
the
|
|
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).
|
|
186
|
+
**v0.71.9 — Knowledge edit + unlearn (live).** The surgical-edit and unlearning surfaces are now
|
|
187
|
+
real, validated on SmolLM2-135M:
|
|
188
|
+
|
|
189
|
+
- **`soup edit set --method rome|memit|alphaedit`** — surgical rank-1 weight edit that patches one
|
|
190
|
+
fact without re-training. On a tiny model a ROME edit moved P("Lyon" | "The capital of France is")
|
|
191
|
+
from 0.0016 → 0.96. `--output` saves the edited model; `--governor` refuses edits after norm blowup.
|
|
192
|
+
- **`soup edit diff --before-model <m> --after-model <m> --probes p.jsonl`** — generate completions
|
|
193
|
+
through both models and surface the probes whose output changed.
|
|
194
|
+
- **`soup edit set --method grace`** — GRACE codebook edit: stores the fact in a discrete
|
|
195
|
+
(key, value) sidecar applied at decode time via a forward hook (survives thousands of edits).
|
|
196
|
+
- **Sequential-edit governor persistence** — per-base-model edit count + verdict survive across
|
|
197
|
+
separate `soup edit set` runs (SQLite, cross-process-locked).
|
|
198
|
+
- **`soup train --task unlearn`** — NPO / SimNPO / RMU unlearning from a `forget_set` (+ optional
|
|
199
|
+
`retain_set`); NPO/SimNPO drive the forget-set loss down while the retain set anchors capability.
|
|
202
200
|
|
|
203
201
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
204
202
|
|
|
@@ -49,22 +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
|
-
- **`soup
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
- **`soup
|
|
59
|
-
|
|
60
|
-
- **`soup
|
|
61
|
-
|
|
62
|
-
-
|
|
63
|
-
|
|
64
|
-
- **`soup
|
|
65
|
-
the
|
|
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).
|
|
52
|
+
**v0.71.9 — Knowledge edit + unlearn (live).** The surgical-edit and unlearning surfaces are now
|
|
53
|
+
real, validated on SmolLM2-135M:
|
|
54
|
+
|
|
55
|
+
- **`soup edit set --method rome|memit|alphaedit`** — surgical rank-1 weight edit that patches one
|
|
56
|
+
fact without re-training. On a tiny model a ROME edit moved P("Lyon" | "The capital of France is")
|
|
57
|
+
from 0.0016 → 0.96. `--output` saves the edited model; `--governor` refuses edits after norm blowup.
|
|
58
|
+
- **`soup edit diff --before-model <m> --after-model <m> --probes p.jsonl`** — generate completions
|
|
59
|
+
through both models and surface the probes whose output changed.
|
|
60
|
+
- **`soup edit set --method grace`** — GRACE codebook edit: stores the fact in a discrete
|
|
61
|
+
(key, value) sidecar applied at decode time via a forward hook (survives thousands of edits).
|
|
62
|
+
- **Sequential-edit governor persistence** — per-base-model edit count + verdict survive across
|
|
63
|
+
separate `soup edit set` runs (SQLite, cross-process-locked).
|
|
64
|
+
- **`soup train --task unlearn`** — NPO / SimNPO / RMU unlearning from a `forget_set` (+ optional
|
|
65
|
+
`retain_set`); NPO/SimNPO drive the forget-set loss down while the retain set anchors capability.
|
|
68
66
|
|
|
69
67
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
70
68
|
|
|
@@ -139,21 +139,26 @@ State lives in `.soup/loop.yaml` (atomic write, cwd-contained, symlink-rejected)
|
|
|
139
139
|
Surgical factual patches WITHOUT a full fine-tuning loop. Hospital data team correcting a misattributed drug interaction, lab fixing a wrong historical date, security team responding to a hallucinated CVE — all one CLI invocation.
|
|
140
140
|
|
|
141
141
|
```bash
|
|
142
|
-
#
|
|
142
|
+
# Live edit: optimises a residual + applies a rank-1 weight update, then saves.
|
|
143
143
|
soup edit set \
|
|
144
|
-
--base
|
|
144
|
+
--base HuggingFaceTB/SmolLM2-135M \
|
|
145
145
|
--method rome \
|
|
146
|
-
--subject "
|
|
146
|
+
--subject "The capital of France is" \
|
|
147
147
|
--target "Lyon" \
|
|
148
|
-
--
|
|
148
|
+
--output ./edited --device cuda
|
|
149
|
+
|
|
150
|
+
# Plan-only mode validates the request + prints the resolved EditPlan + exits 0.
|
|
151
|
+
soup edit set --base ./model --method rome --subject "..." --target "..." --plan-only
|
|
149
152
|
|
|
150
|
-
# Diff what the model
|
|
151
|
-
soup edit diff
|
|
153
|
+
# Diff what the model says before vs after the edit (live generation).
|
|
154
|
+
soup edit diff before after \
|
|
155
|
+
--before-model ./base --after-model ./edited \
|
|
156
|
+
--probes probes.jsonl --output diff.json
|
|
152
157
|
```
|
|
153
158
|
|
|
154
|
-
|
|
159
|
+
The kernels are a covariance-free (`C = I`) variant of the ROME family — well-defined, tractable on a 4 GB box, and validated on SmolLM2-135M (a ROME edit moved `P("Lyon" | "The capital of France is")` from 0.0016 → 0.96). **ROME** edits a single layer; **MEMIT** distributes the residual across a layer band; **AlphaEdit** projects the update orthogonal to the down-proj's top singular direction.
|
|
155
160
|
|
|
156
|
-
The
|
|
161
|
+
The sequential edit governor is persisted (SQLite, cross-process-locked, `SOUP_EDIT_GOVERNOR_DB` override) so the per-base-model edit count + norm-blowup verdict survive across separate `soup edit set` runs. `soup edit set` consults it automatically: it refuses BEFORE the model load past the per-base cap or after a BLOWUP verdict, and records the measured `||ΔW||_F` after each edit. Pass `--no-governor` to opt out. `--registry-id <id>` attaches the edited model (or GRACE codebook) into the Registry lineage.
|
|
157
162
|
|
|
158
163
|
|
|
159
164
|
## Activation Steering (`soup steer`)
|
|
@@ -197,7 +202,7 @@ training:
|
|
|
197
202
|
grace_codebook_dim: 768 # residual-stream width
|
|
198
203
|
```
|
|
199
204
|
|
|
200
|
-
`grace` joins the existing `rome` / `memit` / `alphaedit` allowlist on `soup edit set`; the
|
|
205
|
+
`grace` joins the existing `rome` / `memit` / `alphaedit` allowlist on `soup edit set`; the sequential edit governor still gates the call when the per-base-model edit count or norm-blowup verdict trips. GRACE is live: `soup edit set --method grace --output ./ckpt` captures the residual key at the subject's last token, optimises a replacement value, and appends a `(key, value)` triple to a `grace_codebook.json` sidecar (atomic, cwd-contained). At inference the codebook is applied via a forward hook that substitutes the residual whenever it falls within an epsilon ball of a stored key — so the base weights are never modified and thousands of edits survive without norm blowup.
|
|
201
206
|
|
|
202
207
|
|
|
203
208
|
## Model Registry & Lineage
|
|
@@ -168,8 +168,9 @@ soup can pack --entry-id <id> --out r.can --attest <statement.json> Embed in-to
|
|
|
168
168
|
soup audit-log tail / rotate Tail / rotate the per-command HIPAA/SOC2 audit log (~/.soup/audit.jsonl)
|
|
169
169
|
soup --no-audit-log <cmd> / SOUP_NO_AUDIT_LOG=1 Opt out of the per-command audit line
|
|
170
170
|
soup eval unlearning <run-id> --benchmark tofu|muse|wmdp Forget Quality + Model Utility + PrivLeak verdict
|
|
171
|
-
soup edit set --base <m> --method rome|memit|alphaedit --subject "..." --target "..."
|
|
172
|
-
soup edit diff <before-run> <after-run> --probes p.jsonl Knowledge-injection diff
|
|
171
|
+
soup edit set --base <m> --method rome|memit|alphaedit|grace --subject "..." --target "..." [--output <dir>] [--device cpu] [--governor/--no-governor] [--registry-id <id>] Live surgical knowledge edit (--plan-only available)
|
|
172
|
+
soup edit diff <before-run> <after-run> --probes p.jsonl [--before-model <m> --after-model <m>] Knowledge-injection diff (live before/after generation when both models given)
|
|
173
|
+
soup train --task unlearn NPO/SimNPO/RMU unlearning from data.forget_set (+ optional data.retain_set)
|
|
173
174
|
soup ingest --source langfuse|langsmith|helicone|openpipe|otel|openai-stored --logs <jsonl> Universal trace importer (6 SaaS adapters → normalised JSONL)
|
|
174
175
|
soup prune-prompt --input <jsonl> --output <jsonl> --min-frequency 0.95 Detect + strip shared system-prompt prefix
|
|
175
176
|
soup prune-prompt ... --tokenizer <id-or-path> Tokenizer-aware prefix detection (decodes remaining ids, boundary-safe)
|
|
@@ -189,10 +190,15 @@ soup completions bash | zsh | fish Shell completion script
|
|
|
189
190
|
soup license-advisor --target b2c|defense|embedded Recommend license-clean base for deploy target
|
|
190
191
|
soup license-advisor ... --license <id> --mau N Per-license downstream-risk check (exit 3 on block)
|
|
191
192
|
soup probe sae-diff <sae> <pre.json> <post.json> [--top-k N] SAE feature diff between pre/post-FT activations (v0.66.0)
|
|
192
|
-
soup probe
|
|
193
|
+
soup probe sae-diff <repo> <pre.json> <post.json> --auto-download Fetch an allowlisted SAE into ~/.soup/sae-cache (v0.71.8)
|
|
194
|
+
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)
|
|
195
|
+
soup probe truth <base> [--evidence ev.json] [--weights w.npz] [--output o.json] TruthfulQA-style honesty probe (v0.71.8)
|
|
196
|
+
soup probe harm <base> [--evidence ev.json] [--weights w.npz] [--output o.json] HarmBench-style misuse probe (v0.71.8)
|
|
193
197
|
soup probe interference <losses.json> [--output o.json] Pairwise N×N adapter interference matrix (exit 2 on MAJOR; v0.66.0)
|
|
194
|
-
soup probe
|
|
198
|
+
soup probe interference --measure <eval.jsonl> --base-model <m> --adapter name=path ... [--device cpu] Auto-measure live interference (v0.71.8)
|
|
199
|
+
soup probe pack <base> [--output o.json] Per-base calibrated probe pack manifest (v0.66.0; +truth/harm v0.71.8)
|
|
195
200
|
soup probe pack --list List bundled probe-pack bases (v0.66.0)
|
|
201
|
+
soup train --capture-activations <layer> --capture-prompts <jsonl> Post-train SAE-diff-ready per-token activation snapshot (v0.71.8)
|
|
196
202
|
soup adapters blame ... --top-k 50 Live DataInf-style influence runner (v0.66.0, closes #171)
|
|
197
203
|
soup adapters merge ... --strategy cmaes --eval <s> --budget 1h CMA-ES evolutionary merge — live loop (v0.67.0 schema / v0.71.4 live)
|
|
198
204
|
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`)
|
|
@@ -101,22 +101,27 @@ GDPR right-to-be-forgotten + CSAM/PII leak response, productized. Three method b
|
|
|
101
101
|
|
|
102
102
|
```yaml
|
|
103
103
|
# unlearn.yaml
|
|
104
|
-
base:
|
|
104
|
+
base: HuggingFaceTB/SmolLM2-135M
|
|
105
105
|
task: unlearn
|
|
106
106
|
data:
|
|
107
107
|
train: traces.jsonl
|
|
108
|
-
forget_set: gdpr_deletion_set.jsonl
|
|
109
|
-
retain_set: capability_anchors.jsonl
|
|
108
|
+
forget_set: gdpr_deletion_set.jsonl # rows to unlearn (messages / prompt+completion / text)
|
|
109
|
+
retain_set: capability_anchors.jsonl # optional — anchors general capability
|
|
110
110
|
training:
|
|
111
111
|
unlearn_method: npo # or simnpo / rmu
|
|
112
112
|
unlearn_alpha: 0.5 # retain-set weighting [0.0, 10.0]
|
|
113
113
|
```
|
|
114
114
|
|
|
115
115
|
```bash
|
|
116
|
+
# Run the unlearn loop (validated on SmolLM2-135M — NPO/SimNPO drive forget loss down).
|
|
117
|
+
soup train --config unlearn.yaml --yes
|
|
118
|
+
|
|
116
119
|
# Score the run on TOFU / MUSE / WMDP (OK / MINOR / MAJOR verdict).
|
|
117
120
|
soup eval unlearning <run-id> --benchmark tofu --evidence evidence.json --output report.json
|
|
118
121
|
```
|
|
119
122
|
|
|
123
|
+
`soup train --task unlearn` is live (v0.71.9): it loads a LoRA-wrapped policy, a frozen reference copy (NPO / RMU), and the forget / retain JSONL sets, then optimises the per-method loss — NPO's `(2/β)·mean(-logσ(-β·(π_logp − ref_logp)))` drives the policy's forget-set log-prob below the reference (= forgetting), while the retain set anchors capability. Run NPO/SimNPO **with** a `retain_set` — without one the policy has no utility anchor and Soup warns loudly.
|
|
124
|
+
|
|
120
125
|
Three orthogonal axes: **Forget Quality** (pre/post forget-loss delta), **Model Utility** (retain-accuracy preserved), **PrivLeak** (membership-inference AUC distance from 0.5). Bundled mini-fixtures for all three benchmarks ship in the box (v0.71.1 added MUSE + WMDP alongside the existing TOFU set), so `--benchmark muse|wmdp` runs without supplying evidence. The WMDP forget-set probes ship **redacted** (placeholder prompts + `REFUSED` responses) — Soup never bundles verbatim hazardous-knowledge content.
|
|
121
126
|
|
|
122
127
|
|
|
@@ -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
|
|
|
@@ -49,13 +49,25 @@ def set_edit(
|
|
|
49
49
|
None, "--layer", "-l",
|
|
50
50
|
help="MLP layer index to edit (defaults to method-specific recommended layer).",
|
|
51
51
|
),
|
|
52
|
+
output: Optional[str] = typer.Option(
|
|
53
|
+
None, "--output", "-o",
|
|
54
|
+
help="Directory to save the edited model / GRACE codebook (cwd-contained).",
|
|
55
|
+
),
|
|
56
|
+
device: Optional[str] = typer.Option(
|
|
57
|
+
None, "--device",
|
|
58
|
+
help="torch device (cpu / cuda). Defaults to CUDA when available.",
|
|
59
|
+
),
|
|
60
|
+
use_governor: bool = typer.Option(
|
|
61
|
+
True, "--governor/--no-governor",
|
|
62
|
+
help="Consult the sequential-edit governor (refuse on norm blowup).",
|
|
63
|
+
),
|
|
52
64
|
plan_only: bool = typer.Option(
|
|
53
65
|
False, "--plan-only",
|
|
54
|
-
help="Print the resolved EditPlan and exit without applying
|
|
66
|
+
help="Print the resolved EditPlan and exit without applying.",
|
|
55
67
|
),
|
|
56
68
|
registry_id: Optional[str] = typer.Option(
|
|
57
69
|
None, "--registry-id",
|
|
58
|
-
help="Optional Registry entry id to attach the edited model as a child
|
|
70
|
+
help="Optional Registry entry id to attach the edited model as a child.",
|
|
59
71
|
),
|
|
60
72
|
) -> None:
|
|
61
73
|
"""Apply a single surgical knowledge edit."""
|
|
@@ -97,32 +109,103 @@ def set_edit(
|
|
|
97
109
|
)
|
|
98
110
|
console.print(Panel(body, title="EditPlan", border_style="cyan"))
|
|
99
111
|
|
|
100
|
-
if registry_id is not None:
|
|
101
|
-
console.print(
|
|
102
|
-
f"[dim]Will attach as Registry child of {escape(registry_id)} "
|
|
103
|
-
f"once v0.61.1 lands.[/]"
|
|
104
|
-
)
|
|
105
|
-
|
|
106
112
|
if plan_only:
|
|
107
113
|
console.print("[green]Plan-only mode — exiting without applying.[/]")
|
|
108
114
|
return
|
|
109
115
|
|
|
110
|
-
#
|
|
111
|
-
#
|
|
112
|
-
#
|
|
116
|
+
# Load a persisted governor so sequential edits across separate `soup edit
|
|
117
|
+
# set` runs accumulate (#196 / #197). Best-effort — a missing / unreadable
|
|
118
|
+
# governor DB never blocks an edit.
|
|
119
|
+
governor = None
|
|
120
|
+
store = None
|
|
121
|
+
if use_governor:
|
|
122
|
+
try:
|
|
123
|
+
from soup_cli.utils.edit_governor import (
|
|
124
|
+
EditGovernorStore,
|
|
125
|
+
default_governor_db_path,
|
|
126
|
+
load_governor,
|
|
127
|
+
save_governor,
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
store = EditGovernorStore(default_governor_db_path())
|
|
131
|
+
governor = load_governor(store, plan.base)
|
|
132
|
+
except (ValueError, OSError) as exc:
|
|
133
|
+
console.print(f"[dim]Governor disabled ({escape(str(exc))}).[/]")
|
|
134
|
+
governor = None
|
|
135
|
+
store = None
|
|
136
|
+
|
|
137
|
+
from soup_cli.utils.edit_governor import GovernedEditError
|
|
138
|
+
|
|
113
139
|
try:
|
|
114
|
-
apply_edit(
|
|
115
|
-
|
|
140
|
+
result = apply_edit(
|
|
141
|
+
plan,
|
|
142
|
+
output_dir=output,
|
|
143
|
+
governor=governor,
|
|
144
|
+
device=device,
|
|
145
|
+
)
|
|
146
|
+
except GovernedEditError as exc:
|
|
116
147
|
console.print(
|
|
117
148
|
Panel(
|
|
118
|
-
f"[
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
title="Live edit deferred",
|
|
122
|
-
border_style="yellow",
|
|
149
|
+
f"[red]Edit refused by governor:[/] {escape(str(exc))}",
|
|
150
|
+
title="Sequential-edit governor",
|
|
151
|
+
border_style="red",
|
|
123
152
|
)
|
|
124
153
|
)
|
|
125
|
-
|
|
154
|
+
if store is not None:
|
|
155
|
+
store.close()
|
|
156
|
+
raise typer.Exit(2) from exc
|
|
157
|
+
except (ValueError, RuntimeError, OSError) as exc:
|
|
158
|
+
console.print(f"[red]Edit failed:[/] {escape(str(exc))}")
|
|
159
|
+
if store is not None:
|
|
160
|
+
store.close()
|
|
161
|
+
raise typer.Exit(2) from exc
|
|
162
|
+
|
|
163
|
+
# Persist the updated governor state so the next edit sees the new count.
|
|
164
|
+
if governor is not None and store is not None:
|
|
165
|
+
try:
|
|
166
|
+
save_governor(store, governor)
|
|
167
|
+
except (ValueError, OSError):
|
|
168
|
+
pass
|
|
169
|
+
finally:
|
|
170
|
+
store.close()
|
|
171
|
+
|
|
172
|
+
console.print(
|
|
173
|
+
Panel(
|
|
174
|
+
f"[bold]Method:[/] {escape(result.method)}\n"
|
|
175
|
+
f"[bold]Layers edited:[/] {list(result.layers_edited)}\n"
|
|
176
|
+
f"[bold]Norm delta:[/] {result.norm_delta:.4f}\n"
|
|
177
|
+
f"[bold]Target prob:[/] {result.target_prob_before:.4f} -> "
|
|
178
|
+
f"{result.target_prob_after:.4f}\n"
|
|
179
|
+
+ (
|
|
180
|
+
f"[bold]Saved:[/] {escape(result.output_dir)}\n"
|
|
181
|
+
if result.output_dir
|
|
182
|
+
else ""
|
|
183
|
+
)
|
|
184
|
+
+ (
|
|
185
|
+
f"[bold]Governor:[/] count="
|
|
186
|
+
f"{governor.edit_count} verdict={escape(governor.last_verdict)}"
|
|
187
|
+
if governor is not None
|
|
188
|
+
else "[dim]Governor disabled.[/]"
|
|
189
|
+
),
|
|
190
|
+
title="Edit applied",
|
|
191
|
+
border_style="green",
|
|
192
|
+
)
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
if registry_id is not None and result.output_dir is not None:
|
|
196
|
+
from soup_cli.registry.attach import attach_artifact
|
|
197
|
+
|
|
198
|
+
kind = "grace_codebook" if result.method == "grace" else "edited_model"
|
|
199
|
+
try:
|
|
200
|
+
attach_artifact(registry_id, path=result.output_dir, kind=kind)
|
|
201
|
+
console.print(
|
|
202
|
+
f"[green]Attached {kind} to Registry entry "
|
|
203
|
+
f"{escape(registry_id)}.[/]"
|
|
204
|
+
)
|
|
205
|
+
except (ValueError, FileNotFoundError) as exc:
|
|
206
|
+
console.print(
|
|
207
|
+
f"[yellow]Could not attach to Registry:[/] {escape(str(exc))}"
|
|
208
|
+
)
|
|
126
209
|
|
|
127
210
|
|
|
128
211
|
@app.command(name="diff")
|
|
@@ -148,12 +231,25 @@ def diff_edit(
|
|
|
148
231
|
10, "--top-k", "-k",
|
|
149
232
|
help="Number of changed facts to surface (1-100).",
|
|
150
233
|
),
|
|
234
|
+
before_model: Optional[str] = typer.Option(
|
|
235
|
+
None, "--before-model",
|
|
236
|
+
help="Model path / HF id of the BEFORE model (enables live generation).",
|
|
237
|
+
),
|
|
238
|
+
after_model: Optional[str] = typer.Option(
|
|
239
|
+
None, "--after-model",
|
|
240
|
+
help="Model path / HF id of the AFTER model (enables live generation).",
|
|
241
|
+
),
|
|
242
|
+
device: Optional[str] = typer.Option(
|
|
243
|
+
None, "--device",
|
|
244
|
+
help="torch device (cpu / cuda). Defaults to CUDA when available.",
|
|
245
|
+
),
|
|
151
246
|
) -> None:
|
|
152
247
|
"""Knowledge-injection diff: facts changed between before / after.
|
|
153
248
|
|
|
154
|
-
|
|
155
|
-
v0.
|
|
156
|
-
|
|
249
|
+
Pass both ``--before-model`` and ``--after-model`` (plus ``--probes``) to
|
|
250
|
+
generate the diff LIVE (v0.71.9 #194): each probe is run through both
|
|
251
|
+
models and changed completions are surfaced. Without model paths the
|
|
252
|
+
report is a validated placeholder.
|
|
157
253
|
"""
|
|
158
254
|
from soup_cli.utils.edit_diff import build_diff_report, render_diff_table
|
|
159
255
|
|
|
@@ -163,6 +259,9 @@ def diff_edit(
|
|
|
163
259
|
after_run_id=after,
|
|
164
260
|
probe_file=probe_file,
|
|
165
261
|
top_k=top_k,
|
|
262
|
+
before_model=before_model,
|
|
263
|
+
after_model=after_model,
|
|
264
|
+
device=device,
|
|
166
265
|
)
|
|
167
266
|
except (TypeError, ValueError, FileNotFoundError) as exc:
|
|
168
267
|
console.print(f"[red]Cannot build diff:[/] {escape(str(exc))}")
|