soup-cli 0.71.34__tar.gz → 0.71.36__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.34 → soup_cli-0.71.36}/CHANGELOG.md +124 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/CONTRIBUTING.md +4 -4
- {soup_cli-0.71.34 → soup_cli-0.71.36}/PKG-INFO +29 -16
- {soup_cli-0.71.34 → soup_cli-0.71.36}/README.md +28 -15
- {soup_cli-0.71.34 → soup_cli-0.71.36}/docs/README.md +1 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/docs/commands.md +9 -0
- soup_cli-0.71.36/docs/compliance.md +136 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/docs/data.md +122 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/docs/peft-and-efficiency.md +1 -1
- {soup_cli-0.71.34 → soup_cli-0.71.36}/docs/serving-and-export.md +29 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/docs/training.md +54 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/pyproject.toml +1 -1
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/cli.py +13 -0
- soup_cli-0.71.36/src/soup_cli/commands/card.py +316 -0
- soup_cli-0.71.36/src/soup_cli/commands/ci.py +65 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/data.py +107 -16
- soup_cli-0.71.36/src/soup_cli/commands/data_canary.py +254 -0
- soup_cli-0.71.36/src/soup_cli/commands/data_topics.py +154 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/eval.py +1 -1
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/export.py +55 -14
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/generate.py +1 -1
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +1 -1
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/push.py +61 -10
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/serve.py +3 -3
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/train.py +60 -4
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/tui.py +1 -1
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/ui.py +1 -1
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/config/schema.py +103 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/loader.py +107 -23
- soup_cli-0.71.36/src/soup_cli/templates/eu-ai-act.yaml +45 -0
- soup_cli-0.71.36/src/soup_cli/templates/hipaa.yaml +46 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/manifest.json +4 -0
- soup_cli-0.71.36/src/soup_cli/templates/soc2.yaml +45 -0
- soup_cli-0.71.36/src/soup_cli/templates/sr-11-7.yaml +43 -0
- soup_cli-0.71.36/src/soup_cli/utils/canary.py +349 -0
- soup_cli-0.71.36/src/soup_cli/utils/ci_workflow.py +179 -0
- soup_cli-0.71.36/src/soup_cli/utils/embed.py +231 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/gpu.py +70 -1
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/live_eval.py +39 -10
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/ollama.py +7 -1
- soup_cli-0.71.36/src/soup_cli/utils/rehearsal.py +122 -0
- soup_cli-0.71.36/src/soup_cli/utils/semdedup.py +105 -0
- soup_cli-0.71.36/src/soup_cli/utils/topics.py +240 -0
- soup_cli-0.71.36/tests/test_v07135.py +1010 -0
- soup_cli-0.71.36/tests/test_v07136.py +3013 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/.dockerignore +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/.github/FUNDING.yml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/.github/pull_request_template.md +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/.gitignore +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/.mailmap +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/AGENTS.md +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/CODEOWNERS +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/CONTRIBUTORS.md +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/Dockerfile +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/LICENSE +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/NOTICE +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/SECURITY.md +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/docker-compose.yml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/docs/adapters-and-governance.md +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/docs/backends-and-ops.md +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/docs/evaluation.md +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/docs/models.md +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/docs/performance-and-quantization.md +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/examples/README.md +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/examples/reward_hacking/rewards.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/soup.png +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/soup_logo_svg.svg +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/cloud/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/cloud/modal.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/_eval_v0650.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/_eval_v07110.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/adapters.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/advise.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/data_doctor.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/diagnose.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/draft.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/mcp.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/ra_dit.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/ship.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/shrink.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/spectrum.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/envs/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/envs/_common.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/envs/calculator.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/envs/guess_number.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/envs/retrieval_qa.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/mcp_server/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/mcp_server/registry.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/mcp_server/server.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/recipes/catalog.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/registry/store.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/asr.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/bitnet.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/grpo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/mole_routing.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/online_dpo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/ppo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/raft.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/sft.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/tts.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/ui/app.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_arithmetic.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_fuse.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/advise.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/agent_sandbox.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/asr_metrics.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/best_of_n.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/data_doctor.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/data_lint.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/citation.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/live.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/draft.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/edit_kernels.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/evolve.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/harm_probe.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/hubs.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/interference_live.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/lisa.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/mod.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/peft_wiring.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/prm_reward.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/probe_kernel.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/ra_dit_run.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/raft.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/reward_hack_control.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/rl_checkpoint.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/ship_verdict.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/shrink.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/spectrum_scan.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/truth_probe.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/tts_codec.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/unlearn_kernels.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/templates/chat.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/templates/code.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/templates/medical.yaml +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/__init__.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/conftest.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/qa/v07114_qa.md +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_adapters.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_audio.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_autopilot.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_bco.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_bench.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_build_dag.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_callback.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_cans.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_chat.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_chat_template.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_cli.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_code_review_critical.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_code_review_deferred.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_code_review_high.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_code_review_medium_low.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_code_review_recurring.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_config.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_cost.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_curriculum.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_data.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_data_augment.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_data_sample.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_data_split.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_data_tools.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_diff.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_display.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_doctor.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_embedding.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_errors.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_eval.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_export.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_formats.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_generate.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_gpu.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_grpo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_infer.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_init.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_ipo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_kto.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_loader.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_log_level.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_merge.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_migrate.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_moe.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_orpo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_packing.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_part_a_wave1.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_part_d.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_part_e.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_performance.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_ppo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_pretrain.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_profile.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_profiling.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_progress.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_push.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_qat.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_quant_check.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_quickstart.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_recipes.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_registry.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_relora.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_replay.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_resume.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_review_fixes_v07133.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_rlvr.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_run_cost.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_runs.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_serve.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_server_generate.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_simpo.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_sweep.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_tracker.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_training_speed.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_tui.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_ui.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_unsloth.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0420.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0450.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0490.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0510.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0520.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0530.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v05310.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v05311.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0532.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0533.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0534.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0535.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0536.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0537.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0538.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0539.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0540.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0550.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0560.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0580.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0590.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07110.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07111.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07112.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07113.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07114.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07115.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07116.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07117.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07118.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07119.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0712.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07120.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07121.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07122.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07123.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07124.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07125.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07126.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07127.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07128.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07129.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0713.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07130.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07131.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07132.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07133.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v07134.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0714.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0715.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0716.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0717.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0718.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_v0719.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_validator.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_vision.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_warmup.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_why.py +0 -0
- {soup_cli-0.71.34 → soup_cli-0.71.36}/tests/test_windows_encoding.py +0 -0
|
@@ -12,6 +12,130 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.71.36] - 2026-07-16
|
|
16
|
+
|
|
17
|
+
**Data Moat II** — a semantic layer over your training data, plus two tools for
|
|
18
|
+
what a fine-tune forgets and leaks.
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- **`soup data dedup --semantic`** — near-duplicate removal over embedding
|
|
23
|
+
cosine instead of MinHash shingling. Catches *reworded* duplicates that
|
|
24
|
+
MinHash misses (measured: 0.88–0.91 cosine on rewordings MinHash scored as
|
|
25
|
+
distinct) while correctly keeping distinct-but-similar instructions. Zero new
|
|
26
|
+
dependencies: uses `transformers` from the `[train]` extra. **Read the
|
|
27
|
+
known-limitation below before lowering `--threshold`.**
|
|
28
|
+
- **`soup data topics <data>`** — cluster a dataset and label each cluster with
|
|
29
|
+
c-TF-IDF terms, plus a coverage table (`82% code · 6% math`) and a warning for
|
|
30
|
+
thin topics. Labels are *emergent term clusters*, not a fixed taxonomy.
|
|
31
|
+
- **`soup data canary insert|check`** — Secret-Sharer memorization probe. Insert
|
|
32
|
+
K high-entropy secrets, then check any model/adapter: each secret's loss is
|
|
33
|
+
ranked against never-inserted controls drawn from the same space. Exit 2 on
|
|
34
|
+
MAJOR so CI can gate. Measured on SmolLM2-135M: a memorized set lands at
|
|
35
|
+
percentile 0.0 (loss 1.7–2.5) against a clean model's 4.1–6.2.
|
|
36
|
+
- **`soup train --replay old.jsonl --replay-ratio 0.1`** — continual-learning
|
|
37
|
+
rehearsal. Interleaves a seeded sample of an old dataset into training so a
|
|
38
|
+
new task does not erase the old one. `r` is the fraction of the **final**
|
|
39
|
+
mixed set (`n_replay = round(r/(1-r) · n_new)`), rows are interleaved rather
|
|
40
|
+
than appended, and an undersized pool reports the shortfall instead of
|
|
41
|
+
repeating rows. Mixed into `train` only — validation stays pure new-task.
|
|
42
|
+
|
|
43
|
+
### Fixed
|
|
44
|
+
|
|
45
|
+
- **The hardware-fit gate refused to train any local checkpoint.** A merged
|
|
46
|
+
model (`soup merge -o ./mymodel`) has no size marker in its name, so the size
|
|
47
|
+
guesser returned its 7B default, predicted ~16 GB of VRAM and refused. Local
|
|
48
|
+
checkpoints are now *measured* from their safetensors header (0.135B actual vs
|
|
49
|
+
7.0B guessed) — this had blocked `soup merge` → train-from-merged entirely.
|
|
50
|
+
Third instance of this class after the v0.71.32 (Whisper) and v0.71.33
|
|
51
|
+
(`M` suffix) fixes.
|
|
52
|
+
- **`pip install 'soup-cli[extra]'` hints printed without the extra.** Rich ate
|
|
53
|
+
the bracket, so every "install the missing dependency" message across 17 sites
|
|
54
|
+
told users to run `pip install 'soup-cli'` — which succeeds and still leaves
|
|
55
|
+
the feature broken. Affected `[eval]`, `[data]`, `[serve]`, `[ui]`, `[tui]`,
|
|
56
|
+
`[compile]`, `[mcp]`, `[carbon]` and others, including Typer help text.
|
|
57
|
+
- Replay rows bypassed the image/audio path-traversal validation that the
|
|
58
|
+
primary dataset receives.
|
|
59
|
+
|
|
60
|
+
### Known limitations
|
|
61
|
+
|
|
62
|
+
- **Semantic dedup is not a paraphrase detector.** Measured with
|
|
63
|
+
all-MiniLM-L6-v2, paraphrase cosines (0.49–0.76) **overlap** with
|
|
64
|
+
genuinely-distinct rows (0.54–0.76): "Add two numbers" vs "Multiply two
|
|
65
|
+
numbers" scores 0.759, *higher* than the true paraphrase "reverse a string" /
|
|
66
|
+
"invert the order of characters" at 0.491. **No threshold separates them**, so
|
|
67
|
+
lowering `--threshold` to chase paraphrases deletes real training rows. The
|
|
68
|
+
default (0.8) is deliberately conservative.
|
|
69
|
+
- **Replay is validated at proof-of-mechanism scale.** On SmolLM2-135M + LoRA,
|
|
70
|
+
replay retained the old task 7% better than a no-replay control — the correct
|
|
71
|
+
direction — but forgetting without it was only +4%, i.e. mild. The effect size
|
|
72
|
+
at full fine-tuning or 7B+ is unproven on a 4 GB box.
|
|
73
|
+
- **Canary exposure is the sampled-control approximation**, not full-space rank
|
|
74
|
+
enumeration. "No exposure" is not proof of no memorization.
|
|
75
|
+
- **`data topics` / `dedup --semantic` require `[train]`** (torch) and download
|
|
76
|
+
an embedding model. Plain MinHash `dedup` stays on the light core.
|
|
77
|
+
- Replay v1 is `sft`/`pretrain` only and is incompatible with
|
|
78
|
+
`packing`/`multipack`.
|
|
79
|
+
|
|
80
|
+
## [0.71.35] - 2026-07-15
|
|
81
|
+
|
|
82
|
+
### Added
|
|
83
|
+
- **Compliance templates — `soup init --template hipaa|soc2|eu-ai-act|sr-11-7`.**
|
|
84
|
+
Four regulation-shaped starting configs. Soup's compliance controls are CLI
|
|
85
|
+
flags/commands rather than config keys, so each template is a valid training
|
|
86
|
+
config plus header comments naming the exact commands for that regime
|
|
87
|
+
(PHI scrubbing + air-gap for HIPAA, BOM/attest/sign for SOC 2, Annex XI +
|
|
88
|
+
energy tracking for the EU AI Act, repro-receipt + diagnose/ship for SR 11-7).
|
|
89
|
+
Templates default to a license-clean Apache-2.0 base.
|
|
90
|
+
- **`soup card <registry-id> -o MODELCARD.md` — model-card autogen.** Turns a
|
|
91
|
+
Local Model Registry entry into a publishable, provenance-carrying HF model
|
|
92
|
+
card: base model, training config, eval scorecard, config/data hashes,
|
|
93
|
+
lineage (ancestors) and a table of every registered artifact. Adapter vs
|
|
94
|
+
full-model is inferred from registered artifacts, falling back to the training
|
|
95
|
+
config (LoRA rank, with Spectrum/LISA full-FT correctly treated as dense), so
|
|
96
|
+
the card sets the right `library_name` and never misreports the model type.
|
|
97
|
+
- **`soup push --card <registry-id>`** — render that registry-driven card and
|
|
98
|
+
upload it as `README.md`, overriding the auto-generated one. A bad ref fails
|
|
99
|
+
fast before any network call; HF hub only.
|
|
100
|
+
- **`soup ci init` — fine-tuning CI.** Writes `.github/workflows/soup-gate.yml`,
|
|
101
|
+
a PR gate chaining `soup data validate` → `soup expect` →
|
|
102
|
+
`soup ship --evidence` (exit 2 blocks the merge). Every interpolated path is
|
|
103
|
+
validated to stay under the repo root and shell-quoted; the branch and Python
|
|
104
|
+
version are regex-gated; the write is atomic, symlink-rejecting, and refuses
|
|
105
|
+
to clobber an existing workflow without `--force`.
|
|
106
|
+
- **Compliance quickstart** — a new [docs/compliance.md](docs/compliance.md)
|
|
107
|
+
walkthrough: template → PII scrub → train with receipt/Annex XI/energy →
|
|
108
|
+
registry → BOM + attestation → scan/sign/verify → air-gap → model card → CI gate.
|
|
109
|
+
|
|
110
|
+
### Fixed
|
|
111
|
+
- **GGUF export now actually works on Windows** (validated end-to-end against a
|
|
112
|
+
locally-built llama.cpp: SmolLM2-135M → q4_0 / q4_k_m / q8_0 / f16 → `soup deploy
|
|
113
|
+
ollama` → live inference). Four real bugs, each of which independently broke the
|
|
114
|
+
path:
|
|
115
|
+
- **`soup export --format gguf` cloned llama.cpp into your current directory.**
|
|
116
|
+
`SOUP_DIR` is the bare name `.soup`, but the lookup used it relatively rather
|
|
117
|
+
than anchoring to `~` like the rest of the codebase — so the canonical
|
|
118
|
+
`~/.soup/llama.cpp` was never found and a fresh ~200 MB checkout was dropped
|
|
119
|
+
into whatever directory you ran from.
|
|
120
|
+
- **The first GGUF export downgraded your PyTorch and broke CUDA.** The auto-clone
|
|
121
|
+
ran `pip install -r <llama.cpp>/requirements.txt` into your interpreter, and
|
|
122
|
+
llama.cpp pins `torch~=2.2.1` against the CPU wheel index (observed:
|
|
123
|
+
torch 2.5.1+cu → 2.2.2+cpu, transformers 4.57 → 4.46). Soup now installs only
|
|
124
|
+
the convert script's extra dependencies, unpinned, and never touches torch.
|
|
125
|
+
- **A correctly-built llama.cpp was not found on Windows.** MSVC (like Xcode) is a
|
|
126
|
+
multi-config generator and emits `build/bin/Release/llama-quantize.exe`; only the
|
|
127
|
+
flat single-config layout was searched.
|
|
128
|
+
- **`soup deploy ollama` failed on a relative GGUF path** with "pull model manifest:
|
|
129
|
+
file does not exist" — Ollama resolves `FROM` against the Modelfile's directory,
|
|
130
|
+
and Soup writes the Modelfile to a temp dir. The Modelfile now emits an absolute path.
|
|
131
|
+
- **Model-card injection hardening (affects the pre-existing `soup push` card too).**
|
|
132
|
+
The `## Training` section interpolated `base` / `task` / `scheduler` / `recipe`
|
|
133
|
+
unescaped. Since `SoupConfig.base` and `scheduler` have no charset validator, a
|
|
134
|
+
crafted-but-valid config could smuggle raw HTML — or a backtick breaking out of
|
|
135
|
+
the surrounding code span — into a card published to the Hub. All values now go
|
|
136
|
+
through the markdown escaper, which additionally neutralises backticks and
|
|
137
|
+
strips C0/ESC control bytes.
|
|
138
|
+
|
|
15
139
|
## [0.71.34] - 2026-07-15
|
|
16
140
|
|
|
17
141
|
### Added
|
|
@@ -117,10 +117,10 @@ src/soup_cli/
|
|
|
117
117
|
data/traces/ - Trace-to-Preference harvester (v0.26.0)
|
|
118
118
|
data/collators.py - CrossDocCollator for sample packing (v0.33.0)
|
|
119
119
|
utils/ - GPU, errors, MoE, GaLore, QAT, Unsloth, vLLM, SGLang, Liger, FlashAttn, FSDP, Ring Attention, long-context, quality, curriculum, freeze, dataset-registry, mlx, peft_builder, paths, topology, launcher, mii, pipeline, cut_ce, fp8, gradient_ckpt, kernel_picker, cross_doc_attn, activation_offload, hf, spec_pairing, structured_output, metrics, tracing, auto_quant, lr_finder, grad_accum, mixed_precision, warmup, spike_recovery, convergence, v028_features, multipack_sampler, multipack, neat_packing, jinja_analyzer, quant_menu, relora, peft_patches, peft_wiring, dpo_variants, optimizer_zoo, lr_groups, loftq_init, block_expansion, tts, classifier, distill, bitnet, ebft_gdpo, moe_quant, reasoning_effort, gguf_quant, kv_cache, advanced_precision, save_formats, deploy_measure, advise, advise_history, adapter_diff, adapter_merge, blame, adapter_branch, unlearning, unlearning_eval, knowledge_edit, edit_governor, edit_diff, ra_dit, steering, citation_faithful, grace_codebook, ingest_sources, prune_prompt, active_sampler, ab_test, drift_alarm, tunability, terraform_plan, env_lock, hardware_fit, completions, license_advisor, behavior_battery, capability_suite, checklist_dsl, irt, sae_diff, sleeper_probe, interference, probe_pack, cmaes_merge, vector_bank, mole_routing, adapter_pr, soup_lock, adapter_bisect, prompt_compile, prompt_distill, compile_tools, apple_adapter, local_rl, build_dag, expectations, magpie, persona_hub, brain_rot, reward_hacking, uld, minillm, rl_checkpoint, iterative_dpo, echo_trap, mod, local_rl_scheduler, spectrum_scan, ship_verdict, reward_hack_control, data_doctor, data_lint, shrink, best_of_n, evolve
|
|
120
|
-
templates/ -
|
|
120
|
+
templates/ - 21 built-in soup.yaml templates (YAML + manifest.json) with load_template loader (v0.39.0, +bco v0.40.0, +4 compliance v0.71.35)
|
|
121
121
|
ui/ - Web UI (FastAPI + HTML/JS SPA)
|
|
122
122
|
|
|
123
|
-
tests/ - Test suite (
|
|
123
|
+
tests/ - Test suite (314 files, 16283 tests)
|
|
124
124
|
examples/ - Real-world config examples and datasets
|
|
125
125
|
```
|
|
126
126
|
|
|
@@ -150,7 +150,7 @@ pytest tests/test_data.py::test_detect_alpaca_format -v
|
|
|
150
150
|
pytest tests/ --cov=soup_cli --cov-report=html
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
-
### Test Files (
|
|
153
|
+
### Test Files (313 files)
|
|
154
154
|
|
|
155
155
|
> A representative sample of the suite below. Run `pytest tests/ -v` for the complete list.
|
|
156
156
|
|
|
@@ -388,7 +388,7 @@ If adding a new training algorithm:
|
|
|
388
388
|
|
|
389
389
|
1. Create `trainer/your_trainer.py` wrapping the appropriate TRL trainer
|
|
390
390
|
2. Add config fields to `config/schema.py` (Pydantic v2)
|
|
391
|
-
3. Add template
|
|
391
|
+
3. Add a template YAML under `src/soup_cli/templates/` + a `manifest.json` entry (see the existing 21 templates)
|
|
392
392
|
4. Update `commands/train.py` to route to your trainer
|
|
393
393
|
5. Add 30+ tests in `tests/test_your_trainer.py`
|
|
394
394
|
6. Update `README.md` + the relevant page under `docs/`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: soup-cli
|
|
3
|
-
Version: 0.71.
|
|
3
|
+
Version: 0.71.36
|
|
4
4
|
Summary: Fine-tune and post-train LLMs in one command. No SSH, no config hell.
|
|
5
5
|
Project-URL: Homepage, https://github.com/MakazhanAlpamys/Soup
|
|
6
6
|
Project-URL: Repository, https://github.com/MakazhanAlpamys/Soup
|
|
@@ -193,24 +193,36 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
193
193
|
|
|
194
194
|
## What's New
|
|
195
195
|
|
|
196
|
-
**v0.71.
|
|
197
|
-
|
|
198
|
-
- **`soup
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
196
|
+
**v0.71.36 — Data Moat II.** A semantic layer over your training data, plus two tools for what a fine-tune forgets and what it leaks.
|
|
197
|
+
|
|
198
|
+
- **`soup data dedup --semantic`** — dedup by meaning, not by shared tokens. Catches
|
|
199
|
+
*reworded* duplicates MinHash's shingling scores as distinct. Zero new dependencies.
|
|
200
|
+
- **`soup data topics <data>`** — cluster your data and get a coverage table
|
|
201
|
+
(`82% code · 6% math · 1% safety`) with a warning for thin topics, so you can see what
|
|
202
|
+
you are actually training on.
|
|
203
|
+
- **`soup data canary insert|check`** — insert unique secrets, then prove whether a model
|
|
204
|
+
memorized them: each secret's loss is ranked against never-inserted controls. Exit 2 on a
|
|
205
|
+
leak, so CI can gate. On SmolLM2-135M a memorized set lands at percentile 0.0 against a
|
|
206
|
+
clean model's 4%–93% spread.
|
|
207
|
+
- **`soup train --replay old.jsonl`** — continual-learning rehearsal: interleave your old
|
|
208
|
+
data so the new task doesn't erase it.
|
|
209
|
+
- **Honest result:** semantic dedup is **not** a paraphrase detector. Measured, paraphrase
|
|
210
|
+
cosines (0.49–0.76) *overlap* with genuinely-distinct rows (0.54–0.76) — "Add two numbers"
|
|
211
|
+
vs "Multiply two numbers" scores **higher** than a real paraphrase — so no threshold
|
|
212
|
+
separates them. The default is deliberately conservative; see the CHANGELOG.
|
|
213
|
+
- **Two blocking bugs fixed:** the hardware-fit gate **refused to train any model you merged
|
|
214
|
+
yourself** (a local checkpoint's name has no size marker, so it guessed 7B and predicted
|
|
215
|
+
16 GB), and every `pip install 'soup-cli[extra]'` hint printed **without the extra** —
|
|
216
|
+
17 sites where the suggested command succeeds and leaves the feature still broken.
|
|
208
217
|
|
|
209
218
|
```bash
|
|
210
|
-
soup
|
|
211
|
-
|
|
219
|
+
soup data topics train.jsonl # what am I actually training on?
|
|
220
|
+
soup data dedup train.jsonl --semantic -o clean.jsonl
|
|
221
|
+
|
|
222
|
+
soup data canary insert train.jsonl -o canaried.jsonl --manifest secrets.json
|
|
223
|
+
soup data canary check --manifest secrets.json --base ./my-model # exit 2 = leak
|
|
212
224
|
|
|
213
|
-
soup train --config sft.yaml
|
|
225
|
+
soup train --config sft.yaml --replay old_task.jsonl --replay-ratio 0.1
|
|
214
226
|
```
|
|
215
227
|
|
|
216
228
|
<details>
|
|
@@ -310,6 +322,7 @@ The full feature reference lives in [`docs/`](docs/). Start here:
|
|
|
310
322
|
| [Evaluation & probes](docs/evaluation.md) | Eval design/gate, eval-gated training, benchmarks, NLG metrics, calibration, Elo arena, diagnose, post-train X-ray probes, A/B, drift, tunability, `soup advise` |
|
|
311
323
|
| [Serving & export](docs/serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding (train + measure your own draft), deploy autopilot, Web UI, Agent Forge |
|
|
312
324
|
| [Adapters, registry & governance](docs/adapters-and-governance.md) | Adapter lifecycle/management, model registry, Soup Cans, the data flywheel (`soup loop`), knowledge editing, steering, supply-chain controls (scan/sign/BOM/attest/audit/airgap) |
|
|
325
|
+
| [Compliance & governance quickstart](docs/compliance.md) | HIPAA/SOC2/EU-AI-Act/SR-11-7 `init` templates, provenance (BOM/attest/repro-receipt), audit log, air-gap, model-card autogen (`soup card`), CI gate (`soup ci init`) |
|
|
313
326
|
| [Backends, platform & ops](docs/backends-and-ops.md) | MLX/Unsloth backends, alternative hubs, HF Hub integration, autopilot, experiment tracking, plan/apply, env lockfiles, hardware-fit, completions, plugins, utility commands |
|
|
314
327
|
| [Command reference](docs/commands.md) | The full `soup` command list |
|
|
315
328
|
| [Supported models & extras](docs/models.md) | Recommended model families, the VRAM size guide, the pip extras matrix |
|
|
@@ -49,24 +49,36 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
49
49
|
|
|
50
50
|
## What's New
|
|
51
51
|
|
|
52
|
-
**v0.71.
|
|
53
|
-
|
|
54
|
-
- **`soup
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
52
|
+
**v0.71.36 — Data Moat II.** A semantic layer over your training data, plus two tools for what a fine-tune forgets and what it leaks.
|
|
53
|
+
|
|
54
|
+
- **`soup data dedup --semantic`** — dedup by meaning, not by shared tokens. Catches
|
|
55
|
+
*reworded* duplicates MinHash's shingling scores as distinct. Zero new dependencies.
|
|
56
|
+
- **`soup data topics <data>`** — cluster your data and get a coverage table
|
|
57
|
+
(`82% code · 6% math · 1% safety`) with a warning for thin topics, so you can see what
|
|
58
|
+
you are actually training on.
|
|
59
|
+
- **`soup data canary insert|check`** — insert unique secrets, then prove whether a model
|
|
60
|
+
memorized them: each secret's loss is ranked against never-inserted controls. Exit 2 on a
|
|
61
|
+
leak, so CI can gate. On SmolLM2-135M a memorized set lands at percentile 0.0 against a
|
|
62
|
+
clean model's 4%–93% spread.
|
|
63
|
+
- **`soup train --replay old.jsonl`** — continual-learning rehearsal: interleave your old
|
|
64
|
+
data so the new task doesn't erase it.
|
|
65
|
+
- **Honest result:** semantic dedup is **not** a paraphrase detector. Measured, paraphrase
|
|
66
|
+
cosines (0.49–0.76) *overlap* with genuinely-distinct rows (0.54–0.76) — "Add two numbers"
|
|
67
|
+
vs "Multiply two numbers" scores **higher** than a real paraphrase — so no threshold
|
|
68
|
+
separates them. The default is deliberately conservative; see the CHANGELOG.
|
|
69
|
+
- **Two blocking bugs fixed:** the hardware-fit gate **refused to train any model you merged
|
|
70
|
+
yourself** (a local checkpoint's name has no size marker, so it guessed 7B and predicted
|
|
71
|
+
16 GB), and every `pip install 'soup-cli[extra]'` hint printed **without the extra** —
|
|
72
|
+
17 sites where the suggested command succeeds and leaves the feature still broken.
|
|
64
73
|
|
|
65
74
|
```bash
|
|
66
|
-
soup
|
|
67
|
-
|
|
75
|
+
soup data topics train.jsonl # what am I actually training on?
|
|
76
|
+
soup data dedup train.jsonl --semantic -o clean.jsonl
|
|
68
77
|
|
|
69
|
-
soup
|
|
78
|
+
soup data canary insert train.jsonl -o canaried.jsonl --manifest secrets.json
|
|
79
|
+
soup data canary check --manifest secrets.json --base ./my-model # exit 2 = leak
|
|
80
|
+
|
|
81
|
+
soup train --config sft.yaml --replay old_task.jsonl --replay-ratio 0.1
|
|
70
82
|
```
|
|
71
83
|
|
|
72
84
|
<details>
|
|
@@ -166,6 +178,7 @@ The full feature reference lives in [`docs/`](docs/). Start here:
|
|
|
166
178
|
| [Evaluation & probes](docs/evaluation.md) | Eval design/gate, eval-gated training, benchmarks, NLG metrics, calibration, Elo arena, diagnose, post-train X-ray probes, A/B, drift, tunability, `soup advise` |
|
|
167
179
|
| [Serving & export](docs/serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding (train + measure your own draft), deploy autopilot, Web UI, Agent Forge |
|
|
168
180
|
| [Adapters, registry & governance](docs/adapters-and-governance.md) | Adapter lifecycle/management, model registry, Soup Cans, the data flywheel (`soup loop`), knowledge editing, steering, supply-chain controls (scan/sign/BOM/attest/audit/airgap) |
|
|
181
|
+
| [Compliance & governance quickstart](docs/compliance.md) | HIPAA/SOC2/EU-AI-Act/SR-11-7 `init` templates, provenance (BOM/attest/repro-receipt), audit log, air-gap, model-card autogen (`soup card`), CI gate (`soup ci init`) |
|
|
169
182
|
| [Backends, platform & ops](docs/backends-and-ops.md) | MLX/Unsloth backends, alternative hubs, HF Hub integration, autopilot, experiment tracking, plan/apply, env lockfiles, hardware-fit, completions, plugins, utility commands |
|
|
170
183
|
| [Command reference](docs/commands.md) | The full `soup` command list |
|
|
171
184
|
| [Supported models & extras](docs/models.md) | Recommended model families, the VRAM size guide, the pip extras matrix |
|
|
@@ -14,6 +14,7 @@ feature reference — every `soup` capability, grouped by area.
|
|
|
14
14
|
| [Evaluation & probes](evaluation.md) | Eval design/gate, eval-gated training, benchmarks, NLG metrics, calibration, Elo arena, diagnose, `soup ship` verdict, post-train X-ray probes, A/B, drift, tunability, `soup advise` |
|
|
15
15
|
| [Serving & export](serving-and-export.md) | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding (train + measure your own draft), deploy autopilot, Web UI, Agent Forge |
|
|
16
16
|
| [Adapters, registry & governance](adapters-and-governance.md) | Adapter lifecycle/management, model registry, Soup Cans, the data flywheel (`soup loop`), knowledge editing, steering, supply-chain controls |
|
|
17
|
+
| [Compliance & governance quickstart](compliance.md) | HIPAA/SOC2/EU-AI-Act/SR-11-7 `init` templates, provenance (BOM/attest/repro-receipt), audit log, air-gap, model-card autogen (`soup card`), CI gate (`soup ci init`) |
|
|
17
18
|
| [Backends, platform & ops](backends-and-ops.md) | MLX/Unsloth backends, Modal cloud GPU training, alternative hubs, HF Hub integration, autopilot, experiment tracking, plan/apply, env lockfiles, hardware-fit, completions, plugins, utility commands |
|
|
18
19
|
| [Command reference](commands.md) | The full `soup` command list |
|
|
19
20
|
| [Supported models & extras](models.md) | Recommended model families, the VRAM size guide, the pip extras matrix |
|
|
@@ -8,8 +8,10 @@
|
|
|
8
8
|
|
|
9
9
|
```
|
|
10
10
|
soup init [--template chat|code|...|audio] Create config
|
|
11
|
+
soup init --template hipaa|soc2|eu-ai-act|sr-11-7 Compliance-shaped starting config + the commands for that regime (v0.71.35)
|
|
11
12
|
soup autopilot --model <id> --data d.jsonl --goal <g> Zero-configsoup train --config soup.yaml Start training
|
|
12
13
|
soup train --config soup.yaml --tensorboard Train with TensorBoard logging
|
|
14
|
+
soup train --config soup.yaml --replay old.jsonl --replay-ratio 0.1 Continual-learning rehearsal: interleave old data so the new task doesn't erase it (sft/pretrain)
|
|
13
15
|
soup train --config soup.yaml --fsdp full_shard Train with FSDP2
|
|
14
16
|
soup train --config soup.yaml --deepspeed zero++ DeepSpeed ZeRO++ (quantized comms)
|
|
15
17
|
soup train --config soup.yaml --gpus auto|N Multi-GPU launch hint
|
|
@@ -76,6 +78,10 @@ soup data lint <path> Preference-data linter: length bia
|
|
|
76
78
|
soup data convert <path> --to chatml Convert between formats
|
|
77
79
|
soup data merge data1.jsonl data2.jsonl Combine datasets
|
|
78
80
|
soup data dedup <path> --threshold 0.8 Remove duplicates (MinHash)
|
|
81
|
+
soup data dedup <path> --semantic Dedup by embedding cosine — catches rewordings MinHash misses ([train])
|
|
82
|
+
soup data topics <path> [--clusters N|auto] Cluster + c-TF-IDF labels + coverage table + thin-topic warnings ([train])
|
|
83
|
+
soup data canary insert <path> -o <out> --manifest <m> Insert K secrets to later prove memorization (manifest = SECRET)
|
|
84
|
+
soup data canary check --manifest <m> --base <model> Rank each secret's loss vs never-inserted controls; exit 2 = leak
|
|
79
85
|
soup data stats <path> Extended statistics
|
|
80
86
|
soup data generate --prompt "..." --count 100 Generate synthetic data
|
|
81
87
|
soup data generate ... --provider ollama Use local Ollama instance
|
|
@@ -159,6 +165,9 @@ soup ship --evidence ev.json [--output v.json] Decide offline from pre-computed
|
|
|
159
165
|
soup ship ... --task-mode judge_score --judge-model ollama://llama3.1 Leg-1 via LLM-as-a-judge
|
|
160
166
|
soup ship ... --task-mode pairwise --judge-model ollama://llama3.1 Leg-1 via swap-debiased judge win-rate (base=0.5) (v0.71.31)
|
|
161
167
|
soup ship ... --general-suite mmlu,gsm8k --baseline base.json lm-eval leg-2 + recorded base scores
|
|
168
|
+
soup card <registry-id> -o MODELCARD.md HF model card from a registry entry: training config, evals, hashes, lineage, artifacts (v0.71.35)
|
|
169
|
+
soup push --model ./out --repo you/m --card <registry-id> Upload that registry-driven card as the README (HF only) (v0.71.35)
|
|
170
|
+
soup ci init [--data d.jsonl --suite s.yaml --evidence ev.json] [--branch main --python 3.11] [--force] Write .github/workflows/soup-gate.yml: data validate -> expect -> ship gate on every PR (v0.71.35)
|
|
162
171
|
soup mcp serve MCP server over stdio (drive Soup from Claude Code / Cursor / Cline; requires [mcp] extra) (v0.71.28)
|
|
163
172
|
soup mcp serve --allow-mutating Also expose plan-only train_start / export tools (never execute) (v0.71.28)
|
|
164
173
|
soup shrink --model <id|path> --drop-ratio 0.25 --calib c.jsonl -o shrunk Depth-prune least-important layer block + SHIP/DON'T-SHIP ppl verdict (exit 0/2/1) (v0.71.29)
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Compliance & governance quickstart
|
|
2
|
+
|
|
3
|
+
[← Back to the docs index](README.md)
|
|
4
|
+
|
|
5
|
+
Soup ships an end-to-end compliance workflow: start from a regulation-shaped
|
|
6
|
+
config, train with provenance capture, sign + attest the artifact, keep an audit
|
|
7
|
+
trail, and move it across an air gap — then publish a documented model card and
|
|
8
|
+
gate future changes in CI.
|
|
9
|
+
|
|
10
|
+
- **Pre-wired configs:** `soup init --template hipaa|soc2|eu-ai-act|sr-11-7`
|
|
11
|
+
- **Provenance:** `soup train --repro-receipt` · `soup bom emit` · `soup attest emit`
|
|
12
|
+
- **Integrity:** `soup adapters sign` / `verify` · `soup adapters scan`
|
|
13
|
+
- **Audit trail:** the HIPAA/SOC2 audit log is on by default (`soup audit-log tail`)
|
|
14
|
+
- **Air gap:** `soup airgap-bundle`
|
|
15
|
+
- **Publish:** `soup card <registry-id>` → `MODELCARD.md` (or `soup push --card`)
|
|
16
|
+
- **CI gate:** `soup ci init` → a PR workflow that runs validate → expect → ship
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 1. Start from a compliance template
|
|
21
|
+
|
|
22
|
+
Each template is a normal training config plus header comments listing the exact
|
|
23
|
+
compliance commands to run around it. Pick the regime you operate under:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
soup init --template hipaa # Protected Health Information
|
|
27
|
+
soup init --template soc2 # SOC 2 Trust Services Criteria
|
|
28
|
+
soup init --template eu-ai-act # EU AI Act Annex XI/XII
|
|
29
|
+
soup init --template sr-11-7 # SR 11-7 Model Risk Management
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The compliance controls are Soup **CLI flags/commands, not config keys** — the
|
|
33
|
+
template header documents which ones apply. The steps below are the common path.
|
|
34
|
+
|
|
35
|
+
## 2. Clean the data before training
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
soup data pii ./data/train.jsonl # flag emails / phones / SSNs / MRNs
|
|
39
|
+
soup data decontaminate ./data/train.jsonl # drop public-benchmark overlap
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 3. Train with a reproducibility receipt (+ Annex XI / energy for the EU)
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# SR 11-7 / SOC 2 / HIPAA: capture seeds, kernels, GPU, OS
|
|
46
|
+
soup train --config soup.yaml --repro-receipt receipt.json
|
|
47
|
+
|
|
48
|
+
# EU AI Act: auto-generate the Annex XI/XII documentation + measure energy
|
|
49
|
+
soup train --config soup.yaml \
|
|
50
|
+
--annex-xi annex_xi.md \
|
|
51
|
+
--track-energy --energy-country DEU --energy-out energy.json
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
The audit log records every command automatically:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
soup audit-log tail # review the trail
|
|
58
|
+
soup audit-log rotate # force a rotation pass
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## 4. Register the run, then emit BOM + attestation
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
soup registry push --run-id <run-id> --name my-model --tag v1
|
|
65
|
+
|
|
66
|
+
soup bom emit --name my-model --base-sha <hex> --config-sha <hex> \
|
|
67
|
+
--energy energy.json --format both # CycloneDX + SPDX
|
|
68
|
+
soup attest emit --stage train --subject my-model --sha <hex> \
|
|
69
|
+
--sign ed25519 --key key.pem # in-toto + SLSA-3
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## 5. Sign, scan, and verify the artifact
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
soup adapters scan ./output # weight-space backdoor scan
|
|
76
|
+
soup adapters sign ./output --backend ed25519 --generate-key key.pem
|
|
77
|
+
soup adapters verify ./output --strict --public-key key.pub.pem
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## 6. Air-gap transfer (optional)
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
soup airgap-bundle --model ./output --output my-model.tar --repro-receipt receipt.json
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## 7. Generate a documented model card
|
|
87
|
+
|
|
88
|
+
Turn the registry entry into a provenance-rich `MODELCARD.md` — base model,
|
|
89
|
+
training config, eval scorecard, config/data hashes, lineage, and every
|
|
90
|
+
registered artifact:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
soup card my-model:v1 -o MODELCARD.md
|
|
94
|
+
# or, when uploading to the Hub, override the auto-generated card:
|
|
95
|
+
soup push --model ./output --repo you/my-model --card my-model:v1
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## 8. Gate future changes in CI
|
|
99
|
+
|
|
100
|
+
Write a GitHub Actions workflow that blocks a PR unless the data validates, the
|
|
101
|
+
expectations suite passes, and the SHIP verdict is green:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
soup ci init --data data/train.jsonl --suite expectations.yaml --evidence ship_evidence.json
|
|
105
|
+
# writes .github/workflows/soup-gate.yml
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The generated job runs, in order:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
soup data validate <data> # dataset format compliance
|
|
112
|
+
soup expect <data> <suite> # PII / token-length / refusal / judge expectations
|
|
113
|
+
soup ship --evidence <ev.json> # SHIP / DON'T-SHIP (exit 2 blocks the merge)
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
A minimal `expectations.yaml` for the second step:
|
|
117
|
+
|
|
118
|
+
```yaml
|
|
119
|
+
expectations:
|
|
120
|
+
- name: expect_no_pii
|
|
121
|
+
- name: expect_token_length_between
|
|
122
|
+
min_tokens: 1
|
|
123
|
+
max_tokens: 512
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Supported names: `expect_no_pii`, `expect_token_length_between`,
|
|
127
|
+
`expect_no_refusal_pattern`, `expect_chosen_preferred_over_rejected_by_judge`.
|
|
128
|
+
|
|
129
|
+
Every path is shell-quoted and validated to stay under the repo root, so the
|
|
130
|
+
rendered workflow is injection-safe. Edit the paths to match your repo.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
See also: [Adapters, registry & governance](adapters-and-governance.md) for the
|
|
135
|
+
full supply-chain command set, and [Evaluation & probes](evaluation.md) for the
|
|
136
|
+
`soup ship` verdict engine.
|
|
@@ -22,6 +22,9 @@
|
|
|
22
22
|
- [Synthetic Data Forge](#synthetic-data-forge)
|
|
23
23
|
- [Data Quality Scorecard](#data-quality-scorecard)
|
|
24
24
|
- [Remote Datasets (S3 / GCS / Azure / OCI)](#remote-datasets-s3--gcs--azure--oci)
|
|
25
|
+
- [Semantic dedup (`soup data dedup --semantic`)](#semantic-dedup-soup-data-dedup---semantic)
|
|
26
|
+
- [Topic map (`soup data topics`)](#topic-map-soup-data-topics)
|
|
27
|
+
- [Canaries (`soup data canary insertcheck`)](#canaries-soup-data-canary-insertcheck)
|
|
25
28
|
- [Data Recipe DAG](#data-recipe-dag)
|
|
26
29
|
- [Data Mixing Optimizer (BETA)](#data-mixing-optimizer-beta)
|
|
27
30
|
- [AOT Tokenization with `soup data preprocess`](#aot-tokenization-with-soup-data-preprocess)
|
|
@@ -29,6 +32,125 @@
|
|
|
29
32
|
|
|
30
33
|
---
|
|
31
34
|
|
|
35
|
+
## Semantic dedup (`soup data dedup --semantic`)
|
|
36
|
+
|
|
37
|
+
`soup data dedup` removes near-duplicates with MinHash by default — fast, no
|
|
38
|
+
torch, but **lexical**: it compares shared token shingles, so two rows that say
|
|
39
|
+
the same thing in different words look unrelated to it.
|
|
40
|
+
|
|
41
|
+
`--semantic` compares embedding cosine instead:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
soup data dedup train.jsonl --semantic -o clean.jsonl
|
|
45
|
+
soup data dedup train.jsonl --semantic --threshold 0.85 --field text -o clean.jsonl
|
|
46
|
+
soup data dedup train.jsonl --semantic --embed-model sentence-transformers/all-mpnet-base-v2
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Requires the `[train]` extra (it reuses `transformers`; there is no new
|
|
50
|
+
dependency) and downloads a small embedding model on first use. Plain MinHash
|
|
51
|
+
`dedup` stays on the light core.
|
|
52
|
+
|
|
53
|
+
**What it buys you.** Measured against MinHash on the same rows
|
|
54
|
+
(all-MiniLM-L6-v2):
|
|
55
|
+
|
|
56
|
+
| pair | cosine | MinHash | `--semantic` |
|
|
57
|
+
|---|---|---|---|
|
|
58
|
+
| exact duplicate | 1.000 | caught | caught |
|
|
59
|
+
| "sorts **a list** of integers" / "sorts **an array** of integers" | 0.908 | **missed** | caught |
|
|
60
|
+
| "which sorts a list of **ints**" (reworded) | 0.880 | **missed** | caught |
|
|
61
|
+
| "Add two numbers" / "Multiply two numbers" | 0.759 | kept | kept (correct) |
|
|
62
|
+
|
|
63
|
+
So `--semantic` catches **rewordings** MinHash's shingling scores as distinct.
|
|
64
|
+
|
|
65
|
+
### It is not a paraphrase detector — and why the default is 0.8
|
|
66
|
+
|
|
67
|
+
Heavier paraphrases are **not** reliably separable. Measured, paraphrase cosines
|
|
68
|
+
(0.49–0.76) *overlap* with genuinely-distinct rows (0.54–0.76):
|
|
69
|
+
|
|
70
|
+
- "reverse a string" / "invert the order of characters" — a **true paraphrase** — scores **0.491**
|
|
71
|
+
- "Add two numbers" / "Multiply two numbers" — **two rows you must keep** — scores **0.759**
|
|
72
|
+
|
|
73
|
+
A real paraphrase can score *lower* than two rows that must both survive, so **no
|
|
74
|
+
threshold cleanly separates them**. Lowering `--threshold` to chase paraphrase
|
|
75
|
+
recall deletes real training rows — silent data loss, which is worse than keeping
|
|
76
|
+
a duplicate. The 0.8 default is deliberately conservative. Raise or lower it only
|
|
77
|
+
against your own data, and check what got dropped.
|
|
78
|
+
|
|
79
|
+
`--threshold` means Jaccard for MinHash and cosine for `--semantic`. They are
|
|
80
|
+
different scales; a value tuned for one is not meaningful for the other.
|
|
81
|
+
|
|
82
|
+
## Topic map (`soup data topics`)
|
|
83
|
+
|
|
84
|
+
See what you are actually training on:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
soup data topics train.jsonl # 'auto' picks the cluster count
|
|
88
|
+
soup data topics train.jsonl --clusters 8 -o topics.json
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Embeds every row, clusters with k-means, and labels each cluster with c-TF-IDF
|
|
92
|
+
terms — terms frequent in *that* cluster and rare elsewhere, so filler words like
|
|
93
|
+
"the" never become a label. Prints a coverage table plus a warning for any topic
|
|
94
|
+
under 2% of the data:
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
Topic map — 4200 rows, 6 clusters
|
|
98
|
+
┏━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━┓
|
|
99
|
+
┃ Topic ┃ Rows ┃ Coverage ┃
|
|
100
|
+
┡━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━┩
|
|
101
|
+
│ function / python / code │ 3444 │ 82.0% │
|
|
102
|
+
│ theorem / proof / math │ 252 │ 6.0% │
|
|
103
|
+
│ refuse / harmful / safe │ 42 │ 1.0% │
|
|
104
|
+
└──────────────────────────┴──────┴──────────┘
|
|
105
|
+
topic 'refuse / harmful / safe' is thin: 1.0% of rows (42/4200)
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Labels are **emergent term clusters**, not a classification against a fixed
|
|
109
|
+
taxonomy: "82% code" means 82% of rows landed in a cluster whose top terms look
|
|
110
|
+
like code. Requires `[train]`.
|
|
111
|
+
|
|
112
|
+
## Canaries (`soup data canary insert|check`)
|
|
113
|
+
|
|
114
|
+
Prove whether a model memorized your data — for leak detection and provenance.
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# 1. insert K unique secrets (keep the manifest OUT of your repo)
|
|
118
|
+
soup data canary insert train.jsonl -o canaried.jsonl --count 16 --manifest secrets.json
|
|
119
|
+
|
|
120
|
+
# 2. train on canaried.jsonl as usual, then:
|
|
121
|
+
soup data canary check --manifest secrets.json --base ./my-model --adapter ./lora
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
`check` measures the model's loss on each inserted secret and ranks it against
|
|
125
|
+
never-inserted **controls** drawn from the same secret space and sharing the same
|
|
126
|
+
carrier prompt — so a low loss means the *secret* is unusually likely, not the
|
|
127
|
+
prompt. Exit **2** on MAJOR, so CI can gate on a leak.
|
|
128
|
+
|
|
129
|
+
This is loss-vs-controls (Carlini et al., *The Secret Sharer*), not "ask the model
|
|
130
|
+
and see if it says the secret": a model can memorize a canary and still not emit
|
|
131
|
+
it under greedy decoding, so "nothing came back" would be false reassurance.
|
|
132
|
+
|
|
133
|
+
The verdict asks whether **more** canaries look memorized than chance explains
|
|
134
|
+
(binomial tail, α=0.05) rather than whether any single one dipped low — with 16
|
|
135
|
+
canaries, an "any single one" rule fires on a **clean** model about 15% of the
|
|
136
|
+
time, which would make a CI gate useless.
|
|
137
|
+
|
|
138
|
+
Measured on SmolLM2-135M:
|
|
139
|
+
|
|
140
|
+
| model | loss | percentiles | verdict |
|
|
141
|
+
|---|---|---|---|
|
|
142
|
+
| trained on the canaries | 1.7–2.5 | all 0.0% | **MAJOR** (exit 2) |
|
|
143
|
+
| never saw them | 4.1–6.2 | 1.6%–93% | OK (exit 0) |
|
|
144
|
+
|
|
145
|
+
**The manifest is the sensitive artifact**, not the dataset: anyone holding it can
|
|
146
|
+
reproduce the secrets. It is written `0600` on POSIX and must not be committed
|
|
147
|
+
alongside the data it protects. `check --output` embeds the same secrets.
|
|
148
|
+
|
|
149
|
+
Exposure is a **sampled-control approximation**, not full-space rank enumeration —
|
|
150
|
+
"no exposure" is not proof of no memorization.
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
32
154
|
## Data Engineering Pro
|
|
33
155
|
|
|
34
156
|
The v0.69.0 release ships 5 surfaces that turn dataset prep from "throw a JSONL at the trainer" into a first-class engineering workflow.
|
|
@@ -248,7 +248,7 @@ configs where expert FFNs need lower rank than attention. Caps: 256 keys × valu
|
|
|
248
248
|
`lora_dropout` strip) auto-fire when the model name and architecture match. Both are
|
|
249
249
|
gated and silent on unrelated models.
|
|
250
250
|
|
|
251
|
-
**Template registry** — the
|
|
251
|
+
**Template registry** — the 21 built-in templates now live as
|
|
252
252
|
`src/soup_cli/templates/*.yaml` with a `manifest.json` index. `soup init --template <name>`
|
|
253
253
|
reads the YAML; the inline copies in `schema.py` stay as a back-compat fallback,
|
|
254
254
|
deprecated in favour of the YAML registry.
|