soup-cli 0.71.4__tar.gz → 0.71.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- soup_cli-0.71.6/.mailmap +8 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/CHANGELOG.md +92 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/CONTRIBUTING.md +17 -2
- soup_cli-0.71.6/CONTRIBUTORS.md +43 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/PKG-INFO +15 -16
- {soup_cli-0.71.4 → soup_cli-0.71.6}/README.md +14 -15
- {soup_cli-0.71.4 → soup_cli-0.71.6}/docs/backends-and-ops.md +5 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/docs/commands.md +9 -4
- {soup_cli-0.71.4 → soup_cli-0.71.6}/docs/data.md +22 -6
- {soup_cli-0.71.4 → soup_cli-0.71.6}/docs/evaluation.md +8 -1
- {soup_cli-0.71.4 → soup_cli-0.71.6}/docs/training.md +3 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/pyproject.toml +1 -1
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/_eval_v0650.py +26 -3
- soup_cli-0.71.6/src/soup_cli/commands/_webhook_cli.py +71 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/ab.py +40 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/active_sample.py +28 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/advise.py +21 -1
- soup_cli-0.71.6/src/soup_cli/commands/build.py +92 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/data.py +200 -49
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/data_forge.py +45 -1
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/ingest.py +25 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/prune_prompt.py +34 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/providers/ollama.py +4 -1
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/providers/vllm.py +4 -1
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/experiment/tracker.py +37 -1
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/monitoring/curriculum_callback.py +73 -5
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/advise.py +194 -2
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/advise_history.py +10 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/build_dag.py +482 -10
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/curriculum_dynamic.py +43 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/_common.py +64 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/memorization.py +57 -12
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/drift_alarm.py +7 -105
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/irt.py +199 -2
- soup_cli-0.71.6/src/soup_cli/utils/magpie.py +595 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/peft_wiring.py +13 -1
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/prune_prompt.py +179 -4
- soup_cli-0.71.6/src/soup_cli/utils/webhooks.py +152 -0
- soup_cli-0.71.6/tests/qa/v0716_qa.md +110 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0690_part_a.py +25 -9
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0690_part_c.py +18 -8
- soup_cli-0.71.6/tests/test_v0715.py +1222 -0
- soup_cli-0.71.6/tests/test_v0716.py +1723 -0
- soup_cli-0.71.4/src/soup_cli/commands/build.py +0 -67
- soup_cli-0.71.4/src/soup_cli/utils/magpie.py +0 -164
- {soup_cli-0.71.4 → soup_cli-0.71.6}/.dockerignore +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/.github/FUNDING.yml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/.github/pull_request_template.md +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/.gitignore +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/AGENTS.md +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/CODEOWNERS +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/Dockerfile +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/LICENSE +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/NOTICE +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/SECURITY.md +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/docker-compose.yml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/docs/README.md +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/docs/adapters-and-governance.md +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/docs/models.md +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/docs/peft-and-efficiency.md +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/docs/performance-and-quantization.md +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/docs/serving-and-export.md +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/examples/README.md +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/soup.png +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/soup_logo_svg.svg +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/cli.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/adapters.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/diagnose.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/serve.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/train.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/config/schema.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/loader.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/recipes/catalog.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/registry/store.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/grpo.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/ppo.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/sft.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/ui/app.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/hubs.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/rl_checkpoint.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/templates/chat.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/templates/code.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/templates/medical.yaml +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/__init__.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/conftest.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_adapters.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_audio.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_autopilot.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_bco.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_bench.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_callback.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_cans.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_chat.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_chat_template.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_cli.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_config.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_cost.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_curriculum.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_data.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_data_augment.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_data_sample.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_data_split.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_data_tools.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_diff.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_display.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_doctor.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_embedding.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_errors.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_eval.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_export.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_formats.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_generate.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_gpu.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_grpo.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_infer.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_init.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_ipo.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_kto.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_loader.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_log_level.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_merge.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_migrate.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_moe.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_orpo.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_packing.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_part_a_wave1.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_part_d.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_part_e.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_performance.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_ppo.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_pretrain.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_profile.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_profiling.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_progress.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_push.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_qat.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_quant_check.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_quickstart.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_recipes.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_registry.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_relora.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_replay.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_resume.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_rlvr.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_run_cost.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_runs.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_serve.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_server_generate.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_simpo.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_sweep.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_tracker.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_training_speed.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_tui.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_ui.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_unsloth.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0420.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0450.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0490.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0510.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0520.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0530.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v05310.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v05311.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0532.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0533.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0534.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0535.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0536.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0537.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0538.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0539.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0540.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0550.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0560.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0580.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0590.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0712.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0713.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_v0714.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_validator.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_vision.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_why.py +0 -0
- {soup_cli-0.71.4 → soup_cli-0.71.6}/tests/test_windows_encoding.py +0 -0
soup_cli-0.71.6/.mailmap
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# .mailmap — consolidate contributor identities for `git shortlog` and the
|
|
2
|
+
# GitHub contributors graph. See: https://git-scm.com/docs/gitmailmap
|
|
3
|
+
#
|
|
4
|
+
# Salil Mhatre committed under four name/email combinations
|
|
5
|
+
# (two emails, three display names). Map them all to one canonical identity.
|
|
6
|
+
Salil Mhatre <32305505+Deadpool2000@users.noreply.github.com> <d2kyt@protonmail.com>
|
|
7
|
+
Salil Mhatre <32305505+Deadpool2000@users.noreply.github.com> Salil <32305505+Deadpool2000@users.noreply.github.com>
|
|
8
|
+
Salil Mhatre <32305505+Deadpool2000@users.noreply.github.com> Salil M <32305505+Deadpool2000@users.noreply.github.com>
|
|
@@ -12,6 +12,98 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.71.6] - 2026-06-02
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- **`soup build` live runner** — the dbt-for-SFT DAG (`soup build <manifest>`) now
|
|
19
|
+
*materialises* datasets instead of only dry-running the plan. Five built-in
|
|
20
|
+
transforms ship live (`identity`, `drop_empty`, `lowercase`, `strip`,
|
|
21
|
+
`dedup_exact`); `table` rebuilds from scratch, `view` re-derives on every run,
|
|
22
|
+
and `incremental` re-transforms only the rows whose content hash changed
|
|
23
|
+
(tracked in a SQLite state store, keyed by row hash **and** the model's
|
|
24
|
+
transform+config fingerprint so a transform change re-runs everything). Custom
|
|
25
|
+
transforms are passed per-run via the Python API's `transforms=` map. Outputs
|
|
26
|
+
are written atomically; the `--output-dir` is symlink-checked before any
|
|
27
|
+
directory is created.
|
|
28
|
+
- **`soup data gen-magpie` live generator** — the Magpie synthetic generator
|
|
29
|
+
(Xu et al. 2024) now actually generates. It feeds an aligned model its
|
|
30
|
+
chat-template prefix (chatml / llama3 / gemma / mistral families auto-detected)
|
|
31
|
+
and harvests the self-generated user instruction + assistant response via raw
|
|
32
|
+
completion. Live providers: `ollama` (`/api/generate` raw) and `vllm`
|
|
33
|
+
(`/v1/completions`) — both SSRF-hardened (loopback-only HTTP); `anthropic` is
|
|
34
|
+
rejected (no raw-completion endpoint). Optional `--quality-filter` drops
|
|
35
|
+
low-quality rows via the v0.47 toxicity/educational scorers; exact-duplicate
|
|
36
|
+
instructions are de-duplicated.
|
|
37
|
+
- **`soup eval irt-subset --model {1pl,2pl,3pl}`** — the IRT eval-cost optimiser
|
|
38
|
+
gained 2PL (per-item discrimination) and 3PL (+guessing floor) joint
|
|
39
|
+
coordinate-ascent MLE fits alongside the existing 1PL Rasch. `1pl` keeps the
|
|
40
|
+
closed-form path for back-compat; `2pl`/`3pl` route through the new `fit_irt`.
|
|
41
|
+
- **Tokenizer-aware memorization probe** — `score_memorization(..., tokenizer=...)`
|
|
42
|
+
and `split_prefix(..., tokenizer=...)` (used by `soup diagnose`) now split the
|
|
43
|
+
prefix/suffix on real token-id boundaries and measure echo-overlap over
|
|
44
|
+
sub-word tokens when a tokenizer (HF id / path / duck-typed object) is supplied,
|
|
45
|
+
catching BPE-level memorization that whitespace tokenisation misses. Default
|
|
46
|
+
(no tokenizer) keeps the whitespace behaviour.
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
- **`soup data augment --provider ollama|vllm` no longer crashes** — the command
|
|
50
|
+
imported a non-existent `OllamaProvider` symbol and raised `ImportError` on
|
|
51
|
+
every non-OpenAI provider. It now routes through the shared, SSRF-hardened
|
|
52
|
+
provider factory; `--model` / `--base-url` are honoured, the output path is
|
|
53
|
+
containment- and symlink-checked, and the write is atomic.
|
|
54
|
+
|
|
55
|
+
### Security
|
|
56
|
+
- **Ollama / vLLM provider URLs reject `0.0.0.0`** — `validate_ollama_url` /
|
|
57
|
+
`validate_vllm_url` dropped the bind-any wildcard from their loopback allow-set
|
|
58
|
+
(now `localhost` / `127.0.0.1` / `::1` only), matching the newer
|
|
59
|
+
`validate_hub_endpoint` / `validate_webhook_url` SSRF validators. Reachable now
|
|
60
|
+
that Magpie threads a user-supplied `--base-url` through these providers.
|
|
61
|
+
|
|
62
|
+
## [0.71.5] - 2026-06-02
|
|
63
|
+
|
|
64
|
+
### Added
|
|
65
|
+
- **`soup eval against` now reads eval metrics** — `ExperimentTracker.get_metric_series`
|
|
66
|
+
falls back to the `eval_results` table when the metric is not a per-step
|
|
67
|
+
training column (`loss` / `lr` / `grad_norm` / `speed` / `gpu_mem`). So
|
|
68
|
+
`soup eval against <base> --candidate <run> --metric task_accuracy` returns a
|
|
69
|
+
real score series (benchmark scores live in `eval_results`, not `metrics`)
|
|
70
|
+
instead of "Empty series". Per-step columns still read from `metrics` — no
|
|
71
|
+
regression for existing callers.
|
|
72
|
+
- **`soup advise` learns from past project outcomes** — `soup advise` now reads
|
|
73
|
+
this project's accepted-verdict history (`~/.soup/advise_history.jsonl`) and
|
|
74
|
+
biases the rubric: 3+ successful SFT precedents flip a marginal RAG call to
|
|
75
|
+
SFT; 3+ negative GRPO outcomes suppress GRPO in favour of SFT-on-traces; an
|
|
76
|
+
encouraged choice gets a small confidence nudge. Scoped per-project (one
|
|
77
|
+
project's record never biases another). No history → identical to before.
|
|
78
|
+
- **Slack/Discord webhooks on four more commands** — `--slack-url` / `--discord-url`
|
|
79
|
+
(SSRF-hardened, loopback-only HTTP, RFC1918 rejected, never crashes the
|
|
80
|
+
command) now ship on `soup ingest`, `soup prune-prompt`, `soup ab` (fires only
|
|
81
|
+
on a `reject_h0` / `accept_h0` decision, not `continue`), and
|
|
82
|
+
`soup data active-sample` — not just `soup drift-alarm`. The validator + sender
|
|
83
|
+
moved to a shared `soup_cli/utils/webhooks.py`.
|
|
84
|
+
- **Tokenizer-aware `soup prune-prompt`** — `--tokenizer <model_or_path>` detects
|
|
85
|
+
and strips the shared system-prompt prefix on **token** boundaries instead of
|
|
86
|
+
characters, so a multi-byte UTF-8 prefix can never be split mid-code-point.
|
|
87
|
+
Default (no `--tokenizer`) keeps the whitespace-character behaviour.
|
|
88
|
+
- **Curriculum bucketing by loss percentile** — `DynamicCurriculumCallback` now
|
|
89
|
+
buckets samples by the percentile rank of the live loss (or perplexity)
|
|
90
|
+
signal within a rolling window when `data.curriculum_metric` is `loss` /
|
|
91
|
+
`perplexity`, so a consistently-hard sample is routed to the same difficulty
|
|
92
|
+
bucket across recomputes. `length` and warm-up still use round-robin.
|
|
93
|
+
- **`--hub` on `soup data push` and `soup data forge`** — `soup data push
|
|
94
|
+
--hub modelscope|modelers` uploads a dataset via the matching SDK
|
|
95
|
+
(`repo_type=dataset`, commit message sanitised); `soup data forge --hub
|
|
96
|
+
<non-hf> --teacher owner/name` pre-fetches the teacher model from that hub
|
|
97
|
+
(and warns when the teacher is not a repo id so `--hub` is never silently
|
|
98
|
+
ignored). HF stays the default.
|
|
99
|
+
|
|
100
|
+
### Notes
|
|
101
|
+
- Live SaaS *pull* adapters for `soup ingest` (Langfuse / LangSmith / Helicone /
|
|
102
|
+
OpenPipe / OpenAI SDKs, issue #204) remain deferred: they need credentialed
|
|
103
|
+
vendor accounts with populated trace data to validate honestly. Tracked as an
|
|
104
|
+
open, `infra-blocked` (external-account) item. `soup ingest` continues to parse
|
|
105
|
+
the JSONL export you pull from your dashboard.
|
|
106
|
+
|
|
15
107
|
## [0.71.4] - 2026-06-02
|
|
16
108
|
|
|
17
109
|
### Added
|
|
@@ -120,7 +120,7 @@ src/soup_cli/
|
|
|
120
120
|
templates/ - 17 built-in soup.yaml templates (YAML + manifest.json) with load_template loader (v0.39.0, +bco v0.40.0)
|
|
121
121
|
ui/ - Web UI (FastAPI + HTML/JS SPA)
|
|
122
122
|
|
|
123
|
-
tests/ - Test suite (
|
|
123
|
+
tests/ - Test suite (276 files, 12703 tests)
|
|
124
124
|
examples/ - Real-world config examples and datasets
|
|
125
125
|
```
|
|
126
126
|
|
|
@@ -150,7 +150,11 @@ 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 (275 files)
|
|
154
|
+
|
|
155
|
+
> A representative sample of the suite below. The full table lives in
|
|
156
|
+
> [`.claude/CLAUDE.md`](.claude/CLAUDE.md); run `pytest tests/ -v` for the complete list.
|
|
157
|
+
|
|
154
158
|
|
|
155
159
|
| File | Covers |
|
|
156
160
|
|------|--------|
|
|
@@ -441,6 +445,17 @@ The project follows semantic versioning: `MAJOR.MINOR.PATCH`
|
|
|
441
445
|
5. Tag: `git tag v0.X.0 && git push --tags`
|
|
442
446
|
6. GitHub Actions auto-publishes to PyPI on the `v*` tag (Trusted Publisher / OIDC)
|
|
443
447
|
|
|
448
|
+
## Recognition
|
|
449
|
+
|
|
450
|
+
We credit every contributor — recognition is free and you earned it.
|
|
451
|
+
|
|
452
|
+
- **[CONTRIBUTORS.md](CONTRIBUTORS.md):** every merged (or in-tree-adopted) PR adds you here, with your work and PR number.
|
|
453
|
+
- **CHANGELOG.md:** from the release that ships your change, the entry is tagged `(#NNN by @you)`.
|
|
454
|
+
- **Commit trailers:** PRs land with a `Co-Authored-By:` line for you, so the GitHub
|
|
455
|
+
contributors graph reflects your work even after a squash merge.
|
|
456
|
+
|
|
457
|
+
If you contributed and aren't credited somewhere, that's a bug — open a PR or an issue and we'll fix it.
|
|
458
|
+
|
|
444
459
|
## Community
|
|
445
460
|
|
|
446
461
|
- **Issues:** Report bugs and request features on [GitHub Issues](https://github.com/MakazhanAlpamys/Soup/issues)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Contributors
|
|
2
|
+
|
|
3
|
+
Soup is built by its community. Thank you to everyone who has contributed code,
|
|
4
|
+
tests, docs, and ideas. ❤️
|
|
5
|
+
|
|
6
|
+
This list is maintained by hand alongside the GitHub
|
|
7
|
+
[contributors graph](https://github.com/MakazhanAlpamys/Soup/graphs/contributors).
|
|
8
|
+
Merged a PR and don't see yourself here? Open a PR adding your line — that counts too.
|
|
9
|
+
|
|
10
|
+
## Maintainer
|
|
11
|
+
|
|
12
|
+
- **Alpamys** ([@MakazhanAlpamys](https://github.com/MakazhanAlpamys)) — creator & lead maintainer
|
|
13
|
+
|
|
14
|
+
## Contributors
|
|
15
|
+
|
|
16
|
+
Listed by first contribution. PR numbers link the work.
|
|
17
|
+
|
|
18
|
+
- **Salil Mhatre** ([@Deadpool2000](https://github.com/Deadpool2000))
|
|
19
|
+
- `soup version --json` for machine-readable CI output ([#6](https://github.com/MakazhanAlpamys/Soup/pull/6))
|
|
20
|
+
- RAM + disk-space checks in `soup doctor` ([#7](https://github.com/MakazhanAlpamys/Soup/pull/7))
|
|
21
|
+
- `soup runs clean` for smart checkpoint space management ([#9](https://github.com/MakazhanAlpamys/Soup/pull/9))
|
|
22
|
+
- Official Docker support for easier onboarding ([#20](https://github.com/MakazhanAlpamys/Soup/pull/20))
|
|
23
|
+
- `soup bench` — model speed + VRAM measurement ([#25](https://github.com/MakazhanAlpamys/Soup/pull/25))
|
|
24
|
+
- `--prompts-file` option for `soup bench` ([#30](https://github.com/MakazhanAlpamys/Soup/pull/30))
|
|
25
|
+
- Happy-path + CPU-warning tests for `soup bench` ([#31](https://github.com/MakazhanAlpamys/Soup/pull/31))
|
|
26
|
+
- `soup cost` — cloud GPU training cost estimation ([#42](https://github.com/MakazhanAlpamys/Soup/pull/42))
|
|
27
|
+
- `--nccl` flag for `soup doctor` multi-GPU bandwidth checks ([#178](https://github.com/MakazhanAlpamys/Soup/pull/178))
|
|
28
|
+
- **Chinmaya Sahu** ([@csking101](https://github.com/csking101))
|
|
29
|
+
- DPO example config, sample data, and tests ([#48](https://github.com/MakazhanAlpamys/Soup/pull/48))
|
|
30
|
+
- FP8 `rowwise` + `rowwise_with_gw_hp` scaling recipes ([#62](https://github.com/MakazhanAlpamys/Soup/pull/62))
|
|
31
|
+
- **Yixuan Xu** ([@mzl2233](https://github.com/mzl2233))
|
|
32
|
+
- Guard diagnose-gate on distributed worker ranks ([#169](https://github.com/MakazhanAlpamys/Soup/pull/169))
|
|
33
|
+
- **dreamer0129** ([@dreamer0129](https://github.com/dreamer0129))
|
|
34
|
+
- Rich-markup escape fix in legacy `soup adapters` commands ([#175](https://github.com/MakazhanAlpamys/Soup/pull/175), adopted in-tree as [#174](https://github.com/MakazhanAlpamys/Soup/issues/174))
|
|
35
|
+
- **Vivaan Dhawan** ([@VIVAAN-DHAWAN](https://github.com/VIVAAN-DHAWAN))
|
|
36
|
+
- Reject pickle/zip streams renamed to `.safetensors` via magic-byte check ([#198](https://github.com/MakazhanAlpamys/Soup/pull/198))
|
|
37
|
+
- **Shivam** ([@shivam2931120](https://github.com/shivam2931120))
|
|
38
|
+
- Tokenizer-aware repetition scoring for the echo-trap detector ([#242](https://github.com/MakazhanAlpamys/Soup/pull/242))
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
Want to join this list? See [CONTRIBUTING.md](CONTRIBUTING.md) — good first issues are
|
|
43
|
+
labelled in the [issue tracker](https://github.com/MakazhanAlpamys/Soup/labels/good%20first%20issue).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: soup-cli
|
|
3
|
-
Version: 0.71.
|
|
3
|
+
Version: 0.71.6
|
|
4
4
|
Summary: Fine-tune LLMs in one command. No SSH, no config hell.
|
|
5
5
|
Project-URL: Homepage, https://github.com/MakazhanAlpamys/Soup
|
|
6
6
|
Project-URL: Repository, https://github.com/MakazhanAlpamys/Soup
|
|
@@ -183,21 +183,20 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
183
183
|
|
|
184
184
|
## What's New
|
|
185
185
|
|
|
186
|
-
**v0.71.
|
|
187
|
-
|
|
188
|
-
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
-
|
|
200
|
-
`--from-registry <id>` links training-env snapshots into the Registry lineage DAG.
|
|
186
|
+
**v0.71.6 — Synth data & build pipeline go live.** Three deferred stubs are now real:
|
|
187
|
+
|
|
188
|
+
- **`soup build` materialises** — the dbt-for-SFT DAG no longer just dry-runs. `soup build
|
|
189
|
+
manifest.yaml --output-dir out/` runs the transforms (`drop_empty` / `lowercase` / `strip` /
|
|
190
|
+
`dedup_exact` / `identity` built in), rebuilds `table` / `view` models from scratch, and
|
|
191
|
+
re-transforms only the changed rows for `incremental` models (SQLite-tracked).
|
|
192
|
+
- **`soup data gen-magpie` generates** — feed an aligned model its chat-template prefix and
|
|
193
|
+
harvest the self-generated instruction + response. Live for `--provider ollama` and `vllm`
|
|
194
|
+
(loopback-only), with an optional `--quality-filter`.
|
|
195
|
+
- **2PL / 3PL eval-cost models** — `soup eval irt-subset --model 2pl|3pl` adds per-item
|
|
196
|
+
discrimination (and a 3PL guessing floor) on top of the existing 1PL Rasch fit.
|
|
197
|
+
- **Bug fix:** `soup data augment --provider ollama|vllm` no longer crashes with an `ImportError`
|
|
198
|
+
— it now routes through the shared, SSRF-hardened provider factory and honours `--model` /
|
|
199
|
+
`--base-url`.
|
|
201
200
|
|
|
202
201
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
203
202
|
|
|
@@ -49,21 +49,20 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
49
49
|
|
|
50
50
|
## What's New
|
|
51
51
|
|
|
52
|
-
**v0.71.
|
|
53
|
-
|
|
54
|
-
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
-
|
|
66
|
-
`--from-registry <id>` links training-env snapshots into the Registry lineage DAG.
|
|
52
|
+
**v0.71.6 — Synth data & build pipeline go live.** Three deferred stubs are now real:
|
|
53
|
+
|
|
54
|
+
- **`soup build` materialises** — the dbt-for-SFT DAG no longer just dry-runs. `soup build
|
|
55
|
+
manifest.yaml --output-dir out/` runs the transforms (`drop_empty` / `lowercase` / `strip` /
|
|
56
|
+
`dedup_exact` / `identity` built in), rebuilds `table` / `view` models from scratch, and
|
|
57
|
+
re-transforms only the changed rows for `incremental` models (SQLite-tracked).
|
|
58
|
+
- **`soup data gen-magpie` generates** — feed an aligned model its chat-template prefix and
|
|
59
|
+
harvest the self-generated instruction + response. Live for `--provider ollama` and `vllm`
|
|
60
|
+
(loopback-only), with an optional `--quality-filter`.
|
|
61
|
+
- **2PL / 3PL eval-cost models** — `soup eval irt-subset --model 2pl|3pl` adds per-item
|
|
62
|
+
discrimination (and a 3PL guessing floor) on top of the existing 1PL Rasch fit.
|
|
63
|
+
- **Bug fix:** `soup data augment --provider ollama|vllm` no longer crashes with an `ImportError`
|
|
64
|
+
— it now routes through the shared, SSRF-hardened provider factory and honours `--model` /
|
|
65
|
+
`--base-url`.
|
|
67
66
|
|
|
68
67
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
69
68
|
|
|
@@ -459,6 +459,11 @@ Every completed run also stores an estimated cost (`$` per run) computed from th
|
|
|
459
459
|
captured GPU device name and duration. `soup runs show` renders `—` for CPU /
|
|
460
460
|
MPS / unknown GPUs (no fabricated zeros).
|
|
461
461
|
|
|
462
|
+
As of v0.71.5, the metric-series lookup that powers replay (`ExperimentTracker.get_metric_series`)
|
|
463
|
+
transparently falls back to the `eval_results` table when a metric has no per-step
|
|
464
|
+
rows — so you can plot a benchmark-score curve (e.g. `mmlu`, `gsm8k`) the same way
|
|
465
|
+
you plot `loss`, without caring which table holds the series.
|
|
466
|
+
|
|
462
467
|
### Tracker integrations (--tracker mlflow / swanlab / trackio)
|
|
463
468
|
|
|
464
469
|
```bash
|
|
@@ -72,7 +72,8 @@ soup data generate ... --provider anthropic Use Claude API
|
|
|
72
72
|
soup data generate ... --provider vllm Use local vLLM server
|
|
73
73
|
soup data generate ... --template code Domain templates (code/conversation/qa/preference/reasoning)
|
|
74
74
|
soup data generate ... --quality-pipeline Auto validate + filter + dedup
|
|
75
|
-
soup data augment <path> --strategy rephrase|translate|style
|
|
75
|
+
soup data augment <path> --strategy rephrase|translate|style [--provider ollama|vllm --model <m> --base-url <url>] LLM-driven augmentation
|
|
76
|
+
soup data from-traces --logs l.jsonl --format langchain --signal thumbs_up --output p.jsonl Preference pairs from traces
|
|
76
77
|
soup data from-traces ... --judge --min-confidence 0.7 LLM-judge confidence filter
|
|
77
78
|
soup data review prefs.jsonl --sample 10 Preview preference pairssoup data filter <path> --coherence 0.3 Quality filter (perplexity/coherence)
|
|
78
79
|
soup data sample <path> --n 1000 Random sample subset
|
|
@@ -90,10 +91,12 @@ soup data download user/ds --samples 1000 Stream first 1000 samples
|
|
|
90
91
|
soup data register --name my-ds --path d.jsonl --format alpaca Register dataset
|
|
91
92
|
soup data unregister --name my-ds Remove from registry
|
|
92
93
|
soup data push --input d.jsonl --hf-dataset user/name Upload local JSONL as HF dataset
|
|
94
|
+
soup data push --input d.jsonl --hf-dataset u/n --hub modelscope|modelers Upload to an alternative hub
|
|
93
95
|
soup data registry List all registered datasets
|
|
94
96
|
soup data demo List bundled demo JSONL fixtures
|
|
95
97
|
soup data demo alpaca_demo --output ./d.jsonl Copy a bundled demo JSONL fixture
|
|
96
98
|
soup data forge --docs ./docs --task sft --target-rows 1000 Synthetic data pipeline + provenance
|
|
99
|
+
soup data forge --docs ./docs --hub modelscope --teacher owner/name Pre-fetch the teacher from an alternative hub
|
|
97
100
|
soup data score --input rows.jsonl Composite quality scorecard (PII + toxicity + lang + edu)
|
|
98
101
|
soup data decontaminate --input rows.jsonl --benchmarks mmlu,gsm8k Drop benchmark-overlap rows
|
|
99
102
|
soup data toxicity --input rows.jsonl -o tox.jsonl Flag toxic rows (keyword baseline)
|
|
@@ -137,7 +140,7 @@ soup can publish r.can --hf-hub user/name Publish .can to HF Hub as dataset
|
|
|
137
140
|
soup runs List training runs
|
|
138
141
|
soup runs show <run_id> Run details + loss graph + cost
|
|
139
142
|
soup runs compare <run_1> <run_2> Compare two runs
|
|
140
|
-
soup runs replay <run_id> Replay summary + loss curve from history
|
|
143
|
+
soup runs replay <run_id> Replay summary + loss curve from history (also plots a benchmark-score curve when the metric lives in eval_results)
|
|
141
144
|
soup why [run_id] Explain training anomalies (heuristic)
|
|
142
145
|
soup tui Full-screen Textual dashboard (requires [tui] extra)
|
|
143
146
|
soup train --config soup.yaml --profile Record torch.profiler trace to <output>/profiles/
|
|
@@ -169,8 +172,10 @@ soup edit set --base <m> --method rome|memit|alphaedit --subject "..." --target
|
|
|
169
172
|
soup edit diff <before-run> <after-run> --probes p.jsonl Knowledge-injection diff visualizer
|
|
170
173
|
soup ingest --source langfuse|langsmith|helicone|openpipe|otel|openai-stored --logs <jsonl> Universal trace importer (6 SaaS adapters → normalised JSONL)
|
|
171
174
|
soup prune-prompt --input <jsonl> --output <jsonl> --min-frequency 0.95 Detect + strip shared system-prompt prefix
|
|
175
|
+
soup prune-prompt ... --tokenizer <id-or-path> Tokenizer-aware prefix detection (decodes remaining ids, boundary-safe)
|
|
172
176
|
soup data active-sample --input <jsonl> --output <jsonl> --budget N Top-N uncertain prod traces for human review
|
|
173
177
|
soup ab --input <jsonl> --metric latency|judge_score|retry_rate mSPRT sequential A/B (decision: continue / reject_h0 / accept_h0)
|
|
178
|
+
soup ingest|prune-prompt|ab|data active-sample ... --slack-url <https> | --discord-url <https> Shared SSRF-validated webhook on completion
|
|
174
179
|
soup drift-alarm --reference <jsonl> --live <jsonl> --threshold 0.2 Rolling-KL drift alarm (exit 3 on drift)
|
|
175
180
|
soup drift-alarm ... --slack-url <https> | --discord-url <https> Optional SSRF-validated webhook on drift detected
|
|
176
181
|
soup tunability --list List built-in candidate-base catalogue
|
|
@@ -206,9 +211,9 @@ soup local-rl status --db <path> Print interactions / thumbs-up / t
|
|
|
206
211
|
soup local-rl record --db <path> --prompt <q> --response <r> --thumb up|down Append thumbs record
|
|
207
212
|
soup local-rl harvest --db <path> -o <pairs.jsonl> Harvest DPO pairs from thumbs into JSONL
|
|
208
213
|
soup local-rl train --db <path> --backend ollama|mlx --model <id> Nightly DPO/KTO/ORPO train (v0.68.1)
|
|
209
|
-
soup build <manifest.yaml> [--dry-run]
|
|
214
|
+
soup build <manifest.yaml> [--dry-run] [--output-dir <dir>] dbt-for-SFT DAG: validate + plan + live materialise (v0.69.0; live v0.71.6)
|
|
210
215
|
soup expect <data.jsonl> <suite.yaml> Expectations suite: PII / token-length / refusal / judge (v0.69.0)
|
|
211
|
-
soup data gen-magpie --base <m> --provider ollama|
|
|
216
|
+
soup data gen-magpie --base <m> --provider ollama|vllm --target N --output <jsonl> [--base-url <url>] [--quality-filter] Magpie synthetic generator — live (v0.69.0; live v0.71.6)
|
|
212
217
|
soup data persona-mix --prompts <jsonl> --n N --output <jsonl> Persona-Hub diversity sampler (v0.69.0)
|
|
213
218
|
soup data brain-rot <data.jsonl> [--strict] Brain-rot detector — arXiv 2510.13928 (v0.69.0)
|
|
214
219
|
soup iterative-dpo --base-model <m> --reward-model <rm> --prompts <p.jsonl> --output-dir <out> --rounds N --pairs-per-round N [--plan-only] Iterative DPO loop driver (v0.70.0; live runner v0.70.1)
|
|
@@ -41,8 +41,8 @@ models:
|
|
|
41
41
|
- {name: filtered, kind: incremental, refs: [raw], transform: filter_low_quality}
|
|
42
42
|
- {name: tokenized, kind: incremental, refs: [filtered], transform: tokenize}
|
|
43
43
|
EOF
|
|
44
|
-
soup build build.yaml --dry-run
|
|
45
|
-
|
|
44
|
+
soup build build.yaml --dry-run # validate topology + plan
|
|
45
|
+
soup build build.yaml --output-dir built/ # live materialise (v0.71.6)
|
|
46
46
|
|
|
47
47
|
# Expectations suite — Great Expectations for chat data
|
|
48
48
|
cat > suite.yaml << 'EOF'
|
|
@@ -53,9 +53,9 @@ expectations:
|
|
|
53
53
|
EOF
|
|
54
54
|
soup expect data.jsonl suite.yaml # exit 3 on suite failure
|
|
55
55
|
|
|
56
|
-
# Magpie synthetic data — chat-template-prefix harvest (
|
|
56
|
+
# Magpie synthetic data — chat-template-prefix harvest (live, v0.71.6)
|
|
57
57
|
soup data gen-magpie --base meta-llama/Llama-3.1-8B-Instruct \
|
|
58
|
-
--provider ollama --target 1000 --
|
|
58
|
+
--provider ollama --target 1000 --output magpie.jsonl --quality-filter
|
|
59
59
|
|
|
60
60
|
# Persona-Hub diversity — prompt × persona × style matrix sampling
|
|
61
61
|
soup data persona-mix --prompts prompts.jsonl --n 500 --output mixed.jsonl
|
|
@@ -64,7 +64,7 @@ soup data persona-mix --prompts prompts.jsonl --n 500 --output mixed.jsonl
|
|
|
64
64
|
soup data brain-rot data.jsonl --strict --max-major-fraction 0.10
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
Every command applies the project-wide TOCTOU policy (`os.lstat + S_ISLNK` symlink rejection before any open) and cwd containment via the shared `paths.enforce_under_cwd_and_no_symlink` helper.
|
|
67
|
+
Every command applies the project-wide TOCTOU policy (`os.lstat + S_ISLNK` symlink rejection before any open) and cwd containment via the shared `paths.enforce_under_cwd_and_no_symlink` helper. All five are LIVE: `soup build` materialises with five built-in transforms (`identity` / `drop_empty` / `lowercase` / `strip` / `dedup_exact`) and SQLite-tracked incremental re-transform (v0.71.6); `soup data gen-magpie` harvests via raw completion against `--provider ollama|vllm` (loopback-only; `anthropic` rejected — no raw-completion endpoint, v0.71.6).
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
## Production Trace Ecosystem (`soup ingest`)
|
|
@@ -94,6 +94,14 @@ soup prune-prompt --input traces.jsonl --output pruned.jsonl --min-frequency 0.9
|
|
|
94
94
|
|
|
95
95
|
Binary-search over up-to-32 candidate templates finds the longest qualifying prefix (a longer threshold-meeting prefix may exist beyond the universal one — Soup does not early-exit on the 100% match). Two-pass file read with a 100 000-row DoS cap.
|
|
96
96
|
|
|
97
|
+
**Tokenizer-aware mode (v0.71.5).** Pass `--tokenizer <id-or-path>` (a HuggingFace repo id, a local path, or anything `AutoTokenizer.from_pretrained` accepts) to detect the shared prefix in *token* space and decode only the remaining ids:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
soup prune-prompt --input traces.jsonl --output pruned.jsonl --tokenizer Qwen/Qwen2.5-0.5B
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Char-level stripping can cut a BPE multi-byte sequence in half when the shared prefix ends mid-token; token-aware pruning finds the longest shared *token-id* prefix and decodes the remainder, so the boundary always lands on a real token. Per-row encoding is capped at 50 000 tokens. Omit `--tokenizer` to keep the original character-level behaviour.
|
|
104
|
+
|
|
97
105
|
|
|
98
106
|
## Active-Learning Sampler (`soup data active-sample`)
|
|
99
107
|
|
|
@@ -108,6 +116,8 @@ soup data active-sample --input traces.jsonl --output for-review.jsonl --budget
|
|
|
108
116
|
|
|
109
117
|
The output JSONL is a drop-in prompt set for `soup eval human` (v0.19). Budget is bounded `[1, 100 000]`.
|
|
110
118
|
|
|
119
|
+
**Webhooks (v0.71.5).** `soup ingest`, `soup prune-prompt`, `soup ab`, and `soup data active-sample` all accept `--slack-url` / `--discord-url` and POST a one-line summary on completion through the same SSRF-hardened validator as `soup drift-alarm` (scheme allowlist, loopback-only HTTP, RFC1918 / link-local / reserved / multicast rejected; the post never raises, so a flaky webhook can't fail the command). `soup ab` only fires when the sequential test actually decides (`reject_h0` / `accept_h0`), not while it's still `continue`-ing.
|
|
120
|
+
|
|
111
121
|
|
|
112
122
|
## Synthetic Data Generation
|
|
113
123
|
|
|
@@ -196,9 +206,13 @@ soup data augment ./data/train.jsonl --strategy translate --lang es,fr,de \
|
|
|
196
206
|
# Style transfer (formal / casual / technical / etc.)
|
|
197
207
|
soup data augment ./data/train.jsonl --strategy style --styles formal,casual \
|
|
198
208
|
--output ./data/train_styled.jsonl
|
|
209
|
+
|
|
210
|
+
# Local provider (Ollama / vLLM) — loopback-only, pick the model + base URL
|
|
211
|
+
soup data augment ./data/train.jsonl --strategy rephrase --count 2 \
|
|
212
|
+
--provider ollama --model qwen2.5:0.5b --output ./data/train_local.jsonl
|
|
199
213
|
```
|
|
200
214
|
|
|
201
|
-
Works with any provider supported by `soup data generate` (OpenAI, Ollama,
|
|
215
|
+
Works with any provider supported by `soup data generate` (OpenAI, Ollama, vLLM, local server). `--model` and `--base-url` select a specific local model/endpoint; the Ollama/vLLM paths are loopback-only (SSRF-hardened). `--count` is capped at 10; `--lang` and `--styles` each capped at 10 entries × 32 chars.
|
|
202
216
|
|
|
203
217
|
|
|
204
218
|
## Trace-to-Preference
|
|
@@ -479,6 +493,8 @@ Three tasks supported: `sft` (Q&A pairs), `preference` (chosen/rejected), `tool`
|
|
|
479
493
|
|
|
480
494
|
Document discovery is one level deep over `.txt` / `.md` / `.json` / `.jsonl`; dotfiles + symlinked directories are skipped. All paths are cwd-contained, all writes are atomic via staged-tempfile + `os.replace`, and write targets are rejected if they're symlinks. **Judge providers are live**: `--judge-provider ollama` (localhost-only), `--judge-provider anthropic` (env-only API key), `--judge-provider vllm` (scheme-validated). Per-call judge exceptions logged at DEBUG.
|
|
481
495
|
|
|
496
|
+
**Alternative teacher hubs (v0.71.5).** `--hub modelscope|modelers` pre-fetches the `--teacher` from that hub when the teacher is a routable repo id (`owner/name`); `--hub hf` (default) is a no-op and leaves the teacher as a provenance label. If `--hub` is non-HF but `--teacher` is not a repo id (e.g. the default `local-judge`), Soup prints a loud yellow warning rather than silently dropping the flag.
|
|
497
|
+
|
|
482
498
|
|
|
483
499
|
## Data Quality Scorecard
|
|
484
500
|
|
|
@@ -82,6 +82,8 @@ soup advise compare
|
|
|
82
82
|
4. Task is `factual_lookup` with high output variance → **RAG**.
|
|
83
83
|
5. Otherwise → **SFT**.
|
|
84
84
|
|
|
85
|
+
**Cross-project confidence bias (v0.71.5).** When `~/.soup/advise_history.jsonl` holds ≥3 prior verdicts for the *same choice* in the *same project*, `soup advise` nudges its confidence (not its decision) toward what worked before: a net-positive precedent record (you accepted it AND its recorded outcome was good) bumps confidence up by a small constant; a net-negative one bumps it down. The rubric verdict itself never changes — only how sure Soup is. Verdicts must be `--record`ed for the bias to kick in.
|
|
86
|
+
|
|
85
87
|
**Why this command exists.** "Choose fine-tuning vs RAG vs prompt-engineering" is the most-mis-made decision in the space. Reddit, HN, IBM, and Google Cloud all converge on the same advice (start with prompts, escalate to RAG, fine-tune as last resort) and almost everyone ignores it because nobody has the data to prove their case is the exception. Soup `autopilot` picks hyperparameters AFTER you've decided to train; `soup advise` owns the layer above. No trainer library has an incentive to tell users *not to train* — Unsloth's funnel, Axolotl's hosted business, LLaMA-Factory's Alibaba alignment all monetise the training event.
|
|
86
88
|
|
|
87
89
|
|
|
@@ -213,6 +215,8 @@ soup ab --input ab.jsonl --metric judge_score --alpha 0.01 --beta 0.10 --effect-
|
|
|
213
215
|
|
|
214
216
|
Input rows look like `{"arm": "control", "latency": 1.23}` or `{"arm": "treatment", "judge_score": 0.91}`. Decision is one of `continue` (keep collecting samples), `reject_h0` (real difference detected), `accept_h0` (no significant difference). Composes with `soup loop canary` (v0.58) — promote or roll back as soon as the LLR clears a decision boundary.
|
|
215
217
|
|
|
218
|
+
`soup ab` accepts `--slack-url` / `--discord-url` (v0.71.5) and pings the webhook **only when the test actually decides** (`reject_h0` / `accept_h0`) — a still-running `continue` stays quiet so you're not paged on every peek. Same SSRF-hardened validator as `soup drift-alarm`.
|
|
219
|
+
|
|
216
220
|
|
|
217
221
|
## Drift Alarm (`soup drift-alarm`)
|
|
218
222
|
|
|
@@ -499,8 +503,11 @@ soup eval checklist tests.yaml --evidence responses.json
|
|
|
499
503
|
```bash
|
|
500
504
|
# Pick top-info 30% of items (5-10x eval-bill cut without losing power)
|
|
501
505
|
soup eval irt-subset per_item_correctness.jsonl --size small --output plan.json
|
|
506
|
+
|
|
507
|
+
# Richer item models: 2PL learns per-item discrimination, 3PL adds a guessing floor
|
|
508
|
+
soup eval irt-subset per_item_correctness.jsonl --size small --model 2pl
|
|
502
509
|
```
|
|
503
510
|
|
|
504
|
-
|
|
511
|
+
`--model` picks the item-response model (default `1pl`). `1pl` is the closed-form Rasch fit (`β̂_i = -log(p̂_i / (1 - p̂_i))`); `2pl` adds a per-item discrimination parameter and `3pl` a guessing floor, both via joint coordinate-ascent MLE (v0.71.6). Items rank by Fisher information at θ=0 (`p̂ · (1-p̂)` in 1PL — maximised at 50/50 items, since extremes carry no new ranking information). `full` keeps 100%, `small` keeps 30%, `tiny` keeps 10%.
|
|
505
512
|
|
|
506
513
|
|
|
@@ -907,12 +907,15 @@ Layer dynamic re-weighting on top of the static `curriculum` bucketer. Every N s
|
|
|
907
907
|
training:
|
|
908
908
|
curriculum: true # static bucketer (v0.23.0)
|
|
909
909
|
curriculum_buckets: 4
|
|
910
|
+
curriculum_metric: perplexity # length (default) | loss | perplexity
|
|
910
911
|
curriculum_dynamic: true # NEW — dynamic re-weighting
|
|
911
912
|
curriculum_dynamic_recompute_steps: 50 # refresh every 50 global steps
|
|
912
913
|
curriculum_dynamic_floor: 0.05 # min weight per bucket
|
|
913
914
|
curriculum_dynamic_temperature: 1.0 # softmax temp on uncertainty
|
|
914
915
|
```
|
|
915
916
|
|
|
917
|
+
**Bucketing by difficulty percentile (v0.71.5).** When `curriculum_metric` is `loss` or `perplexity`, the dynamic callback assigns each step's sample to a bucket by its *rank* within a rolling 512-step window of the difficulty signal (perplexity = `exp(min(loss, 50))`), instead of the round-robin fallback used for `length`. This keeps the buckets calibrated to the live loss distribution rather than a static length sort. `length` (the default) keeps the round-robin assignment.
|
|
918
|
+
|
|
916
919
|
Visualise the recorded bucket-weight evolution with `soup runs curriculum-curve <run_id>`.
|
|
917
920
|
|
|
918
921
|
DDP / grad-accum safety: multi-rank launches must wire an `all_reduce` hook on per-bucket stats (a cross-validator rejects un-coordinated multi-rank runs upfront). Multi-trainer expansion beyond `sft` / `pretrain` is tracked for v0.48.1.
|
|
@@ -327,12 +327,20 @@ def register(app: typer.Typer, console: Console) -> None:
|
|
|
327
327
|
@app.command(name="irt-subset")
|
|
328
328
|
def irt_subset_cmd(
|
|
329
329
|
responses_path: str = typer.Argument(
|
|
330
|
-
...,
|
|
330
|
+
...,
|
|
331
|
+
help=(
|
|
332
|
+
"Path to JSONL with rows {item_id, correct(bool), "
|
|
333
|
+
"respondent_id? (required for 2pl/3pl)}."
|
|
334
|
+
),
|
|
331
335
|
),
|
|
332
336
|
size: str = typer.Option(
|
|
333
337
|
"small", "--size", "-z",
|
|
334
338
|
help="Subset profile: full / small / tiny.",
|
|
335
339
|
),
|
|
340
|
+
model: str = typer.Option(
|
|
341
|
+
"1pl", "--model", "-m",
|
|
342
|
+
help="IRT model: 1pl (Rasch) / 2pl (discrimination) / 3pl (+ guessing).",
|
|
343
|
+
),
|
|
336
344
|
output: Optional[str] = typer.Option(
|
|
337
345
|
None, "--output", "-o",
|
|
338
346
|
help="Where to write the rendered IrtSubsetPlan JSON.",
|
|
@@ -341,7 +349,9 @@ def register(app: typer.Typer, console: Console) -> None:
|
|
|
341
349
|
"""Pick a minimum-cost eval subset that preserves ranking power."""
|
|
342
350
|
from soup_cli.utils.irt import (
|
|
343
351
|
IRT_PROFILES,
|
|
352
|
+
SUPPORTED_IRT_MODELS,
|
|
344
353
|
fit_difficulty,
|
|
354
|
+
fit_irt,
|
|
345
355
|
load_response_rows,
|
|
346
356
|
pick_irt_subset,
|
|
347
357
|
)
|
|
@@ -352,6 +362,12 @@ def register(app: typer.Typer, console: Console) -> None:
|
|
|
352
362
|
f"(valid: {', '.join(sorted(IRT_PROFILES))})[/]"
|
|
353
363
|
)
|
|
354
364
|
raise typer.Exit(2)
|
|
365
|
+
if model not in SUPPORTED_IRT_MODELS:
|
|
366
|
+
console.print(
|
|
367
|
+
f"[red]Invalid --model: {escape(model)} "
|
|
368
|
+
f"(valid: {', '.join(SUPPORTED_IRT_MODELS)})[/]"
|
|
369
|
+
)
|
|
370
|
+
raise typer.Exit(2)
|
|
355
371
|
|
|
356
372
|
try:
|
|
357
373
|
rows = load_response_rows(responses_path)
|
|
@@ -360,13 +376,20 @@ def register(app: typer.Typer, console: Console) -> None:
|
|
|
360
376
|
raise typer.Exit(2) from exc
|
|
361
377
|
|
|
362
378
|
try:
|
|
363
|
-
|
|
364
|
-
|
|
379
|
+
if model == "1pl":
|
|
380
|
+
# 1PL keeps the single-respondent correct-rate fit (back-compat;
|
|
381
|
+
# rows need only {item_id, correct}).
|
|
382
|
+
items = fit_difficulty(rows)
|
|
383
|
+
else:
|
|
384
|
+
# 2PL/3PL need a response matrix ({respondent_id, item_id, correct}).
|
|
385
|
+
items = fit_irt(rows, model=model)
|
|
386
|
+
plan = pick_irt_subset(items, size=size)
|
|
365
387
|
except (TypeError, ValueError) as exc:
|
|
366
388
|
console.print(f"[red]IRT fit failed:[/] {escape(str(exc))}")
|
|
367
389
|
raise typer.Exit(2) from exc
|
|
368
390
|
|
|
369
391
|
console.print(Panel(
|
|
392
|
+
f"Model: [bold]{escape(model)}[/]\n"
|
|
370
393
|
f"Profile: [bold]{escape(plan.size)}[/]\n"
|
|
371
394
|
f"Selected: {len(plan.item_ids)} / {plan.total_items}\n"
|
|
372
395
|
f"Approx cost cut: {plan.cost_ratio:.1%}",
|