soup-cli 0.71.20__tar.gz → 0.71.22__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.20 → soup_cli-0.71.22}/CHANGELOG.md +117 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/CONTRIBUTING.md +2 -2
- {soup_cli-0.71.20 → soup_cli-0.71.22}/PKG-INFO +17 -15
- {soup_cli-0.71.20 → soup_cli-0.71.22}/README.md +16 -14
- {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/backends-and-ops.md +2 -2
- {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/commands.md +2 -1
- {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/performance-and-quantization.md +5 -4
- {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/training.md +4 -3
- {soup_cli-0.71.20 → soup_cli-0.71.22}/pyproject.toml +15 -15
- soup_cli-0.71.22/src/soup_cli/__init__.py +3 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/apple_adapter.py +27 -3
- soup_cli-0.71.22/src/soup_cli/commands/delinearize_llama4.py +105 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/deploy.py +24 -20
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/config/schema.py +43 -4
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/grpo.py +40 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/tts.py +20 -13
- soup_cli-0.71.22/src/soup_cli/utils/advanced_precision.py +355 -0
- soup_cli-0.71.22/src/soup_cli/utils/agent_rollout.py +394 -0
- soup_cli-0.71.22/src/soup_cli/utils/apple_adapter.py +576 -0
- soup_cli-0.71.22/src/soup_cli/utils/delinearize_llama4.py +370 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/deploy_measure.py +265 -8
- soup_cli-0.71.22/src/soup_cli/utils/grpo_long_context.py +231 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/minillm.py +114 -7
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/mole_routing.py +144 -21
- soup_cli-0.71.22/src/soup_cli/utils/tts_codec.py +373 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/v028_features.py +25 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/vllm.py +10 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0440_part_d.py +2 -1
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0500_part_b.py +6 -4
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0500_part_c.py +20 -6
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0530.py +8 -6
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0680_part_d.py +10 -5
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07120.py +14 -1
- soup_cli-0.71.22/tests/test_v07121.py +2268 -0
- soup_cli-0.71.22/tests/test_v07122.py +1343 -0
- soup_cli-0.71.20/src/soup_cli/__init__.py +0 -3
- soup_cli-0.71.20/src/soup_cli/commands/delinearize_llama4.py +0 -64
- soup_cli-0.71.20/src/soup_cli/utils/advanced_precision.py +0 -143
- soup_cli-0.71.20/src/soup_cli/utils/agent_rollout.py +0 -130
- soup_cli-0.71.20/src/soup_cli/utils/apple_adapter.py +0 -144
- soup_cli-0.71.20/src/soup_cli/utils/delinearize_llama4.py +0 -79
- soup_cli-0.71.20/src/soup_cli/utils/grpo_long_context.py +0 -96
- {soup_cli-0.71.20 → soup_cli-0.71.22}/.dockerignore +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/FUNDING.yml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/pull_request_template.md +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/workflows/ci.yml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/.gitignore +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/.mailmap +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/AGENTS.md +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/CODEOWNERS +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/CONTRIBUTORS.md +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/Dockerfile +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/LICENSE +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/NOTICE +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/SECURITY.md +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/docker-compose.yml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/README.md +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/adapters-and-governance.md +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/data.md +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/evaluation.md +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/models.md +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/peft-and-efficiency.md +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/docs/serving-and-export.md +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/README.md +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/soup.png +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/soup_logo_svg.svg +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cans/run.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cans/schema.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cans/unpack.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cli.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cloud/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/cloud/modal.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/_eval_v0650.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/_eval_v07110.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/adapters.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/advise.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/can.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/data.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/diagnose.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/push.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/ra_dit.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/runs.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/serve.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/train.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/loader.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/gate.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/experiment/tracker.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/recipes/catalog.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/registry/store.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/bitnet.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/mole_routing.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/ppo.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/raft.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/sft.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/ui/app.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/ui/static/app.js +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/ui/static/index.html +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/adapter_sign.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/advise.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/agent_sandbox.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/audit_log.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/citation.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/live.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/edit_kernels.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/harm_probe.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/hubs.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/interference_live.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/live_eval.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/lr_groups.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/mod.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/peft_wiring.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/probe_kernel.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ra_dit_run.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/raft.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/rl_checkpoint.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/truth_probe.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/unlearn_kernels.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/templates/chat.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/templates/code.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/templates/medical.yaml +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/__init__.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/conftest.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/qa/v07114_qa.md +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_adapters.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_audio.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_autopilot.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_bco.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_bench.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_build_dag.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_callback.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_cans.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_chat.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_chat_template.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_cli.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_config.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_cost.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_curriculum.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_data.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_data_augment.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_data_sample.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_data_split.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_data_tools.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_diff.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_display.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_doctor.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_embedding.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_errors.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_eval.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_export.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_formats.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_generate.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_gpu.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_grpo.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_infer.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_inference_advanced.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_init.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_ipo.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_kto.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_loader.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_log_level.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_merge.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_migrate.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_moe.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_orpo.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_packing.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_part_a_wave1.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_part_d.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_part_e.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_performance.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_ppo.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_pretrain.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_profile.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_profiling.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_progress.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_push.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_qat.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_quant_check.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_quickstart.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_recipes.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_registry.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_relora.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_replay.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_resume.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_rlvr.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_run_cost.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_runs.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_serve.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_server_generate.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_simpo.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_sweep.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_tracker.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_training_speed.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_tui.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_ui.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_unsloth.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0420.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0450.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0490.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0510.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0520.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v05310.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v05311.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0532.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0533.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0534.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0535.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0536.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0537.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0538.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0539.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0540.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0550.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0560.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0580.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0590.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07110.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07111.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07112.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07113.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07114.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07115.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07116.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07117.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07118.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v07119.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0712.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0713.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0714.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0715.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0716.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0717.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0718.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_v0719.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_validator.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_vision.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_why.py +0 -0
- {soup_cli-0.71.20 → soup_cli-0.71.22}/tests/test_windows_encoding.py +0 -0
|
@@ -12,6 +12,123 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.71.22] - 2026-06-10
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- **Perf & measure polish** — a 4-issue patch tightening four live paths from
|
|
19
|
+
the recent BETA lifts. Pure code, validated on Windows + RTX 3050.
|
|
20
|
+
- **MiniLLM on-policy KV-cache (closes #263).** The on-policy distillation
|
|
21
|
+
rollout (`soup train` with `training.minillm_on_policy: true`) now threads
|
|
22
|
+
`past_key_values` so each step forwards only the new token instead of
|
|
23
|
+
re-feeding the whole prefix — resolving the O(L²) per-step cost from
|
|
24
|
+
v0.71.18. A LoRA student (the common distill case) activates the cache
|
|
25
|
+
too: the new `_supports_kv_cache` probe unwraps the PEFT model via
|
|
26
|
+
`get_base_model()` before deciding. The teacher is always cached; the
|
|
27
|
+
student cache respects the retained autograd graph and degrades gracefully
|
|
28
|
+
if a model returns no cache mid-loop.
|
|
29
|
+
- **`soup serve --mole` KV-cache (closes #262).** Each of the N task adapters
|
|
30
|
+
in a served MoLE now keeps its own KV cache in lockstep, created fresh per
|
|
31
|
+
`generate()` call (never stored on the instance, so there is no
|
|
32
|
+
cross-request leak). Top-k zero-weight adapters are still skipped, and the
|
|
33
|
+
output is byte-identical to the no-cache path on a real MoLE.
|
|
34
|
+
- **Deploy-autopilot live measure factories (closes #143).** `soup deploy
|
|
35
|
+
autopilot --measure` ships a first-party transformers loader factory (lazy
|
|
36
|
+
import, per-candidate quant config via the Quant Menu loader; `before` =
|
|
37
|
+
base, `after` = quantised) replacing the inject-only test hooks. The
|
|
38
|
+
baseline is now scored **once** and the whole candidate list is
|
|
39
|
+
**pre-validated up front**, so a typo in `--measure-candidates` raises
|
|
40
|
+
before any model load instead of burning N live loads or doubling peak
|
|
41
|
+
VRAM.
|
|
42
|
+
- **Live-codec TTS via SNAC, partial (#265-partial).** The live-codec
|
|
43
|
+
encode path (`data.format='audio'`) is validated for **Orpheus**:
|
|
44
|
+
`load_audio_mono` now probes `soundfile.info` (duration + byte cap)
|
|
45
|
+
*before* `soundfile.read` (no multi-GB decode into RAM) and reads through
|
|
46
|
+
an `O_NOFOLLOW` file descriptor; a real SNAC-backed encode of a 24 kHz wav
|
|
47
|
+
produced 42 Orpheus codec tokens.
|
|
48
|
+
|
|
49
|
+
### Fixed
|
|
50
|
+
- MiniLLM on-policy KV-cache was silently disabled for LoRA students (the
|
|
51
|
+
PEFT wrapper hid the base model's `past_key_values` support) — now probed
|
|
52
|
+
via `get_base_model()`.
|
|
53
|
+
- Deploy-measure no longer re-scores the baseline once per candidate or burns
|
|
54
|
+
live model loads on a bad candidate (per-candidate validation moved up front).
|
|
55
|
+
- `load_audio_mono` capped audio duration only *after* decoding into RAM —
|
|
56
|
+
the cap is now checked from `soundfile.info` before reading.
|
|
57
|
+
|
|
58
|
+
### Known limitations
|
|
59
|
+
- KV-cache correctness is validated (cache == no-cache equality on real tiny
|
|
60
|
+
artifacts) but large-model throughput gains were not measured on the 4 GB
|
|
61
|
+
dev box.
|
|
62
|
+
- **#265 stays open** — the live-codec `data.format='audio'` SNAC encode path
|
|
63
|
+
is validated for Orpheus only; the other four TTS families keep their
|
|
64
|
+
per-family codec dependency gate.
|
|
65
|
+
- The deploy-measure first-party factory's real quantized (bitsandbytes 4-bit)
|
|
66
|
+
load is CUDA + bitsandbytes-gated; on Windows / no-bnb the injected test
|
|
67
|
+
seams are the validated path.
|
|
68
|
+
- The MoLE serve KV-cache assumes single-sequence (`B == 1`) decode.
|
|
69
|
+
|
|
70
|
+
## [0.71.21] - 2026-06-10
|
|
71
|
+
|
|
72
|
+
### Added
|
|
73
|
+
- **Precision & rollout lift (BETA, hw-gated)** — lifts five deferred
|
|
74
|
+
`NotImplementedError` stubs to live code.
|
|
75
|
+
- **FP8 attention + NVFP4 (closes #141).** `training.fp8_attention: true`
|
|
76
|
+
now converts the model's attention projections (q/k/v/o + fused qkv
|
|
77
|
+
variants) to FP8 training modules via torchao's
|
|
78
|
+
`convert_to_float8_training` with an attention-only `module_filter_fn`
|
|
79
|
+
(Hopper SM ≥ 9.0 gate); `training.nvfp4: true` quantises via torchao's
|
|
80
|
+
`NVFP4Config` (Blackwell SM ≥ 10.0 gate). Both are wired into the v0.28
|
|
81
|
+
speed/memory pipeline and degrade to a visible yellow advisory when the
|
|
82
|
+
gate fires — a conversion failing partway raises an honest "model may be
|
|
83
|
+
PARTIALLY converted" error rather than silently training on a
|
|
84
|
+
half-converted model.
|
|
85
|
+
- **vLLM sleep mode (closes #124).** `training.vllm_sleep_mode: true` is
|
|
86
|
+
live: `create_vllm_engine(sleep_mode=True)` sets
|
|
87
|
+
`AsyncEngineArgs.enable_sleep_mode` (vLLM ≥ 0.7 gate with a friendly
|
|
88
|
+
upgrade message), the new `vllm_sleep_cycle(engine, level=1|2)` context
|
|
89
|
+
manager wraps the optimisation step (wake in `finally`), and the GRPO
|
|
90
|
+
trainer threads the flag into TRL's `GRPOConfig` when the installed TRL
|
|
91
|
+
exposes the hook (advisory otherwise).
|
|
92
|
+
- **Multi-turn agent rollout launchers (closes #125).** `soup train` with
|
|
93
|
+
`task: grpo` + `training.rollout_backend: openenv` +
|
|
94
|
+
`training.rollout_func: my_module:fn` now runs a LIVE rollout: the
|
|
95
|
+
resolver imports the operator's callable (same trusted-code policy as
|
|
96
|
+
`data.prompt_strategy`), feeds it the dataset prompts as seeds, and the
|
|
97
|
+
returned `{prompt, answer?}` rows replace the prompt dataset. Rows are
|
|
98
|
+
normalised (extra keys stripped, message-list prompts deep-copied,
|
|
99
|
+
non-string answers rejected loudly). `art` / `ruler` / `nemo_gym` raise a
|
|
100
|
+
friendly ImportError when the backend package is missing and an honest
|
|
101
|
+
BETA gate when present (injectable `_EXTERNAL_ROLLOUT_RUNNERS` seam).
|
|
102
|
+
Validated by a real GRPO + openenv rollout train on SmolLM2-135M.
|
|
103
|
+
- **Apple-adapter conversion (closes #228).** `soup apple-adapter` is live
|
|
104
|
+
for `hf-to-mlx` / `mlx-to-hf`: PEFT LoRA safetensors ↔ mlx-lm adapters
|
|
105
|
+
with both matrices transposed (`lora_A [r,in]` ↔ `lora_a [in,r]`),
|
|
106
|
+
bf16 sources upcast via the torch loader, `adapters.safetensors` +
|
|
107
|
+
`num_layers` emitted for mlx-lm's `load_adapters`, rank/alpha/dropout
|
|
108
|
+
carried through, legacy `adapters.npz` still read, optional v0.60
|
|
109
|
+
Merkle-root signing. The `*-to-apple` directions stay upstream-gated
|
|
110
|
+
(no published FoundationModels adapter spec). Validated by a real bf16
|
|
111
|
+
PEFT adapter round-tripping with numeric equality.
|
|
112
|
+
- **Llama-4 expert delinearization (closes #97).** `soup
|
|
113
|
+
delinearize-llama4` now runs a live torch runtime: fused 2-D expert
|
|
114
|
+
tensors `[E*dim_in, dim_out]` reshape to 3-D `[E, dim_in, dim_out]`
|
|
115
|
+
(expert count from `config.json` or `--num-experts`), other tensors pass
|
|
116
|
+
through, JSON sidecars are copied, writes are atomic. `--plan-only`
|
|
117
|
+
keeps the old render-and-exit flow.
|
|
118
|
+
|
|
119
|
+
### Fixed
|
|
120
|
+
- `safetensors.numpy.save` silently mangles non-contiguous (transposed)
|
|
121
|
+
arrays — the apple-adapter writer now makes every array C-contiguous
|
|
122
|
+
first (caught by the new round-trip assertions).
|
|
123
|
+
|
|
124
|
+
### Known limitations
|
|
125
|
+
- fp8_attention / nvfp4 / vllm_sleep_mode are BETA hardware-gated — the
|
|
126
|
+
converters and gates ship validated via capability probes and fake-module
|
|
127
|
+
dispatch tests, but end-to-end runs need a Hopper/Blackwell GPU + torchao
|
|
128
|
+
(or vLLM ≥ 0.7), none of which exist on the maintainer's RTX 3050 /
|
|
129
|
+
Windows box. The `art` / `ruler` / `nemo_gym` rollout adapters are
|
|
130
|
+
honestly BETA-gated until validated against the upstream packages.
|
|
131
|
+
|
|
15
132
|
## [0.71.20] - 2026-06-09
|
|
16
133
|
|
|
17
134
|
### 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 (293 files, 14184 tests)
|
|
124
124
|
examples/ - Real-world config examples and datasets
|
|
125
125
|
```
|
|
126
126
|
|
|
@@ -150,7 +150,7 @@ pytest tests/test_data.py::test_detect_alpaca_format -v
|
|
|
150
150
|
pytest tests/ --cov=soup_cli --cov-report=html
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
-
### Test Files (
|
|
153
|
+
### Test Files (293 files)
|
|
154
154
|
|
|
155
155
|
> A representative sample of the suite below. The full table lives in
|
|
156
156
|
> [`.claude/CLAUDE.md`](.claude/CLAUDE.md); run `pytest tests/ -v` for the complete list.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: soup-cli
|
|
3
|
-
Version: 0.71.
|
|
3
|
+
Version: 0.71.22
|
|
4
4
|
Summary: Fine-tune and post-train LLMs in one command. No SSH, no config hell.
|
|
5
5
|
Project-URL: Homepage, https://github.com/MakazhanAlpamys/Soup
|
|
6
6
|
Project-URL: Repository, https://github.com/MakazhanAlpamys/Soup
|
|
@@ -189,20 +189,22 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
189
189
|
|
|
190
190
|
## What's New
|
|
191
191
|
|
|
192
|
-
**v0.71.
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
192
|
+
**v0.71.22 — Perf & measure polish.** Four live paths from the recent BETA lifts get tighter:
|
|
193
|
+
|
|
194
|
+
- **MiniLLM on-policy distillation is fast** — the on-policy rollout
|
|
195
|
+
(`training.minillm_on_policy: true`) now threads a KV cache so each step forwards only the new
|
|
196
|
+
token instead of re-feeding the whole prefix, resolving the earlier O(L²) cost. A LoRA student
|
|
197
|
+
activates the cache too (the PEFT wrapper is unwrapped before the cache check).
|
|
198
|
+
- **`soup serve --mole` uses a KV cache** — each task adapter in a served MoLE keeps its own cache
|
|
199
|
+
in lockstep, created fresh per request (no cross-request leak). Output is byte-identical to the
|
|
200
|
+
previous no-cache path.
|
|
201
|
+
- **`soup deploy autopilot --measure` is real and frugal** — a first-party transformers loader
|
|
202
|
+
factory loads each candidate live (per-candidate quant config), scores the baseline **once**, and
|
|
203
|
+
pre-validates the whole `--measure-candidates` list up front, so a typo fails before any model
|
|
204
|
+
load instead of burning N loads or doubling peak VRAM.
|
|
205
|
+
- **Live-codec TTS via SNAC (Orpheus)** — encoding raw audio at train time (`data.format: audio`)
|
|
206
|
+
is validated for Orpheus: audio is duration- and byte-capped from `soundfile.info` **before**
|
|
207
|
+
decoding into RAM, and read through a symlink-safe file descriptor.
|
|
206
208
|
|
|
207
209
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
208
210
|
|
|
@@ -49,20 +49,22 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
49
49
|
|
|
50
50
|
## What's New
|
|
51
51
|
|
|
52
|
-
**v0.71.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
52
|
+
**v0.71.22 — Perf & measure polish.** Four live paths from the recent BETA lifts get tighter:
|
|
53
|
+
|
|
54
|
+
- **MiniLLM on-policy distillation is fast** — the on-policy rollout
|
|
55
|
+
(`training.minillm_on_policy: true`) now threads a KV cache so each step forwards only the new
|
|
56
|
+
token instead of re-feeding the whole prefix, resolving the earlier O(L²) cost. A LoRA student
|
|
57
|
+
activates the cache too (the PEFT wrapper is unwrapped before the cache check).
|
|
58
|
+
- **`soup serve --mole` uses a KV cache** — each task adapter in a served MoLE keeps its own cache
|
|
59
|
+
in lockstep, created fresh per request (no cross-request leak). Output is byte-identical to the
|
|
60
|
+
previous no-cache path.
|
|
61
|
+
- **`soup deploy autopilot --measure` is real and frugal** — a first-party transformers loader
|
|
62
|
+
factory loads each candidate live (per-candidate quant config), scores the baseline **once**, and
|
|
63
|
+
pre-validates the whole `--measure-candidates` list up front, so a typo fails before any model
|
|
64
|
+
load instead of burning N loads or doubling peak VRAM.
|
|
65
|
+
- **Live-codec TTS via SNAC (Orpheus)** — encoding raw audio at train time (`data.format: audio`)
|
|
66
|
+
is validated for Orpheus: audio is duration- and byte-capped from `soundfile.info` **before**
|
|
67
|
+
decoding into RAM, and read through a symlink-safe file descriptor.
|
|
66
68
|
|
|
67
69
|
Full history: [CHANGELOG.md](CHANGELOG.md) · [GitHub Releases](https://github.com/MakazhanAlpamys/Soup/releases).
|
|
68
70
|
|
|
@@ -641,10 +641,10 @@ Closed catalog (`MappingProxyType`) of ready-to-edit YAML / JSON. Output path cw
|
|
|
641
641
|
## Llama 4 Delinearizer
|
|
642
642
|
|
|
643
643
|
```bash
|
|
644
|
-
soup delinearize-llama4 ./llama4-checkpoint --target ./out-delinearized --
|
|
644
|
+
soup delinearize-llama4 ./llama4-checkpoint --target ./out-delinearized [--num-experts N] [--plan-only]
|
|
645
645
|
```
|
|
646
646
|
|
|
647
|
-
|
|
647
|
+
LIVE (v0.71.21): reshapes fused Llama-4 expert weights `[E*din, dout]` → `[E, din, dout]` shard-by-shard (atomic writes, per-shard 16 GiB cap, cwd containment) and copies the JSON sidecars so the target stays loadable. The expert count defaults from `config.json` (`text_config.num_local_experts`); pass `--num-experts` when the config doesn't carry it (exit 2 otherwise). `--plan-only` keeps the original preview flow and writes nothing. `is_llama4_model` uses a word-boundary regex matching the `is_gemma4_model` pattern — `ungemma-llama-4ish` is rejected.
|
|
648
648
|
|
|
649
649
|
|
|
650
650
|
## Ctrl+C Graceful Save
|
|
@@ -24,6 +24,7 @@ soup push --model ./output --repo user/name Upload to HuggingFace
|
|
|
24
24
|
soup push --model ./output --repo user/name --collection user/coll-abc123 Add to HF Collection
|
|
25
25
|
soup merge --adapter ./output Merge LoRA with base model
|
|
26
26
|
soup merge-sharded-fsdp-weights ./shards -o merged.safetensors Consolidate FSDP shards into one safetensors (v0.71.14; --plan-only previews)
|
|
27
|
+
soup delinearize-llama4 ./src --target ./out [--num-experts N] [--plan-only] Live Llama-4 fused-expert reshape [E*din,dout] -> [E,din,dout] + sidecar copy (v0.71.21)
|
|
27
28
|
soup export --model ./output --format gguf Export to GGUF (Ollama)
|
|
28
29
|
soup export --model ./output --deploy ollama Export GGUF + auto-deploy to Ollama
|
|
29
30
|
soup export --model ./output --format onnx Export to ONNX
|
|
@@ -225,7 +226,7 @@ soup lock show / soup lock check Show + drift-check (exit 3 on drif
|
|
|
225
226
|
soup compile <program.py> --eval <suite> [--optimizer mipro|gepa|textgrad|copro|bootstrap_fewshot] [--plan-only] DSPy / GEPA / TextGrad prompt-program compiler — live (v0.71.13; pip install 'soup-cli[compile]')
|
|
226
227
|
soup distill-prompt --traces <jsonl> --teacher <m> --student <m> --strategy sft|preference|kl [--provider ollama|anthropic|vllm] [--base-url <url>] [--temperature F] [--max-rows N] Distill prompt-heavy traces via a live teacher (v0.71.13)
|
|
227
228
|
soup compile-tools <spec.json|yaml> --eval <jsonl> [--optimizer textgrad|gepa] [--plan-only] TextGrad / GEPA tool-schema optimiser — live (v0.71.13; pip install 'soup-cli[compile]')
|
|
228
|
-
soup apple-adapter <source-dir> --direction hf-to-mlx|mlx-to-hf|hf-to-apple|mlx-to-apple --output <dir> [--sign]
|
|
229
|
+
soup apple-adapter <source-dir> --direction hf-to-mlx|mlx-to-hf|hf-to-apple|mlx-to-apple --output <dir> [--sign] [--plan-only] PEFT LoRA <-> mlx-lm adapter conversion — live (v0.71.21; *-to-apple upstream-gated exit 3)
|
|
229
230
|
soup local-rl init --db <path> Create personal-LLM flywheel SQLite schema (v0.68.0)
|
|
230
231
|
soup local-rl status --db <path> Print interactions / thumbs-up / thumbs-down counters
|
|
231
232
|
soup local-rl record --db <path> --prompt <q> --response <r> --thumb up|down Append thumbs record
|
|
@@ -468,12 +468,13 @@ soup serve --model ./output --kv-cache-type q8_0 # 8-bit quantized KV cache
|
|
|
468
468
|
- vLLM / SGLang serve wiring is still tracked under [#140](https://github.com/MakazhanAlpamys/Soup/issues/140) (`infra-blocked`).
|
|
469
469
|
|
|
470
470
|
|
|
471
|
-
## FP8 Attention + NVFP4 + Native `unsloth_bnb_4bit`
|
|
471
|
+
## FP8 Attention + NVFP4 + Native `unsloth_bnb_4bit`
|
|
472
472
|
|
|
473
|
-
Three
|
|
473
|
+
Three TrainingConfig bools extend the v0.28.0 FP8 menu. `fp8_attention` and `nvfp4` are LIVE
|
|
474
|
+
torchao converters as of v0.71.21 (hardware-gated):
|
|
474
475
|
|
|
475
|
-
- `fp8_attention: true` — requires `quantization_aware: fp8` AND a non-MLX backend.
|
|
476
|
-
- `nvfp4: true` — Blackwell-only FP4 training
|
|
476
|
+
- `fp8_attention: true` — requires `quantization_aware: fp8` AND a non-MLX backend. Converts the attention projections (q/k/v/o and fused variants) to torchao float8 training on Hopper+ GPUs. Missing torchao or a pre-Hopper GPU degrades to a clear advisory; a conversion-phase failure raises an honest "model may be PARTIALLY converted" error instead of training on a half-converted model.
|
|
477
|
+
- `nvfp4: true` — Blackwell-only FP4 training via torchao `NVFP4Config` + `quantize_`. Gated to non-MLX + `modality: text`; the SM ≥ 10 runtime check fires at trainer construction.
|
|
477
478
|
- `unsloth_bnb_4bit: true` — promotes "Unsloth Dynamic 4-bit" from an implicit `backend=unsloth + quantization=4bit` combo to a named flag. Mutual rejection of inconsistent combos at config load.
|
|
478
479
|
|
|
479
480
|
Cross-validator ordering picks the most actionable error: `quantization_aware='fp8'` prerequisite fires before the MLX rejection on `fp8_attention`, so a YAML missing both surfaces the deeper issue first.
|
|
@@ -484,9 +484,10 @@ training:
|
|
|
484
484
|
grpo_fp16: true # FP16 RL (unsloth parity)
|
|
485
485
|
# Long-context + memory-efficient RL
|
|
486
486
|
long_context_grpo: true # wires Tiled MLP when available
|
|
487
|
-
vllm_sleep_mode: true # between-rollouts vLLM standby
|
|
488
|
-
# Multi-turn agent rollout
|
|
489
|
-
rollout_backend:
|
|
487
|
+
vllm_sleep_mode: true # between-rollouts vLLM standby — LIVE (vLLM >= 0.7)
|
|
488
|
+
# Multi-turn agent rollout — openenv is LIVE: your function's rows replace the prompt dataset
|
|
489
|
+
rollout_backend: openenv # one of: art / ruler / nemo_gym / openenv
|
|
490
|
+
rollout_func: my_module:my_rollout # module:function resolver (openenv; trusted operator code)
|
|
490
491
|
# Stability / efficiency knobs
|
|
491
492
|
ref_model_ema_alpha: 0.99 # EMA sync policy → reference
|
|
492
493
|
replay_buffer_size: 2048
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "soup-cli"
|
|
7
|
-
version = "0.71.
|
|
7
|
+
version = "0.71.22"
|
|
8
8
|
description = "Fine-tune and post-train LLMs in one command. No SSH, no config hell."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
@@ -22,7 +22,7 @@ classifiers = [
|
|
|
22
22
|
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
23
23
|
]
|
|
24
24
|
# Core install (`pip install soup-cli`) is intentionally light: the CLI, config
|
|
25
|
-
# system, and data tools
|
|
25
|
+
# system, and data tools — no PyTorch. v0.71.0 split the heavy training stack
|
|
26
26
|
# (torch / transformers / peft / trl / datasets / bitsandbytes / accelerate)
|
|
27
27
|
# into the `[train]` extra below.
|
|
28
28
|
dependencies = [
|
|
@@ -35,7 +35,7 @@ dependencies = [
|
|
|
35
35
|
]
|
|
36
36
|
|
|
37
37
|
[project.optional-dependencies]
|
|
38
|
-
# v0.71.0
|
|
38
|
+
# v0.71.0 — heavy training stack. `pip install 'soup-cli[train]'` to fine-tune.
|
|
39
39
|
# These were core dependencies through v0.70.0; pins are unchanged.
|
|
40
40
|
train = [
|
|
41
41
|
"torch>=2.0.0",
|
|
@@ -46,7 +46,7 @@ train = [
|
|
|
46
46
|
"bitsandbytes>=0.41.0",
|
|
47
47
|
"accelerate>=0.25.0",
|
|
48
48
|
]
|
|
49
|
-
# v0.71.0
|
|
49
|
+
# v0.71.0 — convenience meta-extra pulling the main optional stacks.
|
|
50
50
|
all = ["soup-cli[train,serve,ui,data]"]
|
|
51
51
|
eval = ["lm-eval>=0.4.0"]
|
|
52
52
|
data = ["datasketch>=1.6.0"]
|
|
@@ -74,31 +74,31 @@ sglang = ["sglang>=0.2.0", "fastapi>=0.104.0", "uvicorn>=0.24.0"]
|
|
|
74
74
|
mlx = ["mlx>=0.20.0", "mlx-lm>=0.20.0"]
|
|
75
75
|
cce = ["cut-cross-entropy>=24.10.0"]
|
|
76
76
|
tui = ["textual>=0.50.0"]
|
|
77
|
-
# v0.53.8 #89
|
|
77
|
+
# v0.53.8 #89 — bundle MLflow / SwanLab / Trackio for `--tracker` users.
|
|
78
78
|
trackers = ["mlflow>=2.0.0", "swanlab>=0.3.0", "trackio>=0.0.1"]
|
|
79
|
-
# v0.53.8 #85
|
|
79
|
+
# v0.53.8 #85 — fsspec backends for remote dataset loading (s3 / gs / az / oci).
|
|
80
80
|
remote = ["fsspec>=2024.1.0", "s3fs>=2024.1.0", "gcsfs>=2024.1.0", "adlfs>=2024.1.0"]
|
|
81
|
-
# v0.53.10 #150
|
|
81
|
+
# v0.53.10 #150 — bundle scikit-optimize so `soup data mix --optimize` runs the
|
|
82
82
|
# Bayesian-style loop instead of falling back to the v0.48.0 Dirichlet sampler.
|
|
83
83
|
mix = ["scikit-optimize>=0.9.0"]
|
|
84
|
-
# v0.53.10 #113
|
|
84
|
+
# v0.53.10 #113 — production-grade data quality: langdetect (language) +
|
|
85
85
|
# presidio-analyzer (PII). Llama-Guard-3-1B is documented as a manual recipe
|
|
86
86
|
# (license + ~600 MB weight blob too large to bundle by default).
|
|
87
87
|
data-pro = ["langdetect>=1.0.9", "presidio-analyzer>=2.2.0"]
|
|
88
|
-
# v0.71.2 #179/#185
|
|
88
|
+
# v0.71.2 #179/#185 — ed25519 detached signing for `soup attest` / `soup
|
|
89
89
|
# adapters sign`. Pure-offline; Sigstore keyless (OIDC + Fulcio/Rekor network)
|
|
90
90
|
# stays infra-blocked and is NOT bundled here.
|
|
91
91
|
sign = ["cryptography>=41.0.0"]
|
|
92
|
-
# v0.71.3 #181
|
|
92
|
+
# v0.71.3 #181 — reportlab PDF rendering for `soup train --annex-xi *.pdf`.
|
|
93
93
|
pdf = ["reportlab>=4.0.0"]
|
|
94
|
-
# v0.71.3 #180
|
|
94
|
+
# v0.71.3 #180 — codecarbon offline energy/CO2 measurement for
|
|
95
95
|
# `soup train --track-energy` (offline; no IP-geolocation network call).
|
|
96
96
|
carbon = ["codecarbon>=2.0.0"]
|
|
97
|
-
# v0.71.13 #225/#227
|
|
97
|
+
# v0.71.13 #225/#227 — prompt-program / tool-schema compilers
|
|
98
98
|
# (`soup compile` / `soup compile-tools`). Lazy-imported with a friendly
|
|
99
99
|
# ImportError; not installed by default (heavy dependency trees).
|
|
100
100
|
compile = ["dspy-ai>=2.5.0", "textgrad>=0.1.0", "gepa>=0.0.1"]
|
|
101
|
-
# v0.71.18 #16
|
|
101
|
+
# v0.71.18 #16 — serverless cloud GPU training (`soup train --cloud modal`).
|
|
102
102
|
# Lazy-imported; only needed for `--cloud-submit` (plan-only render needs no
|
|
103
103
|
# dependency). Modal auth is via `modal setup`.
|
|
104
104
|
modal = ["modal>=0.60.0"]
|
|
@@ -113,7 +113,7 @@ Issues = "https://github.com/MakazhanAlpamys/Soup/issues"
|
|
|
113
113
|
|
|
114
114
|
[tool.hatch.build.targets.wheel]
|
|
115
115
|
packages = ["src/soup_cli"]
|
|
116
|
-
# v0.53.8 #93
|
|
116
|
+
# v0.53.8 #93 — include bundled fixture JSONLs as package data so
|
|
117
117
|
# `soup data demo` works in zipapp / namespace-package installs.
|
|
118
118
|
# Hatchling's ``packages = ["src/soup_cli"]`` already recurses into the
|
|
119
119
|
# package directory, so we use the artifacts directive (NOT
|
|
@@ -146,7 +146,7 @@ follow_imports = "silent"
|
|
|
146
146
|
testpaths = ["tests"]
|
|
147
147
|
markers = [
|
|
148
148
|
"smoke: slow smoke tests that download models and run training (run with: pytest -m smoke)",
|
|
149
|
-
"unit: fast isolated tests
|
|
149
|
+
"unit: fast isolated tests — no subprocess, network, filesystem, or real model load",
|
|
150
150
|
"integration: tests that touch real subprocess, SQLite, filesystem, or HTTP",
|
|
151
151
|
]
|
|
152
152
|
addopts = "-m 'not smoke' --cov=soup_cli --cov-fail-under=77 --cov-report=term-missing:skip-covered"
|
|
@@ -61,13 +61,37 @@ def apple_adapter_cmd(
|
|
|
61
61
|
if plan_only:
|
|
62
62
|
return
|
|
63
63
|
|
|
64
|
+
# v0.71.21 #228 — live conversion. Exit codes: 2 = validation /
|
|
65
|
+
# missing-input, 3 = upstream-gated (Apple spec not yet public),
|
|
66
|
+
# 1 = missing dependency, 0 = success.
|
|
64
67
|
try:
|
|
65
|
-
convert_apple_adapter(plan)
|
|
66
|
-
except
|
|
68
|
+
report = convert_apple_adapter(plan)
|
|
69
|
+
except RuntimeError as exc:
|
|
67
70
|
console.print(
|
|
68
71
|
Panel(
|
|
69
72
|
f"[yellow]{escape(str(exc))}[/]",
|
|
70
|
-
title="
|
|
73
|
+
title="apple-adapter — upstream-gated",
|
|
71
74
|
)
|
|
72
75
|
)
|
|
73
76
|
raise typer.Exit(3) from exc
|
|
77
|
+
except (ValueError, FileNotFoundError) as exc:
|
|
78
|
+
console.print(f"[red]{escape(str(exc))}[/]")
|
|
79
|
+
raise typer.Exit(2) from exc
|
|
80
|
+
except ImportError as exc:
|
|
81
|
+
console.print(f"[red]{escape(str(exc))}[/]")
|
|
82
|
+
raise typer.Exit(1) from exc
|
|
83
|
+
|
|
84
|
+
skipped_note = (
|
|
85
|
+
f"\nSkipped (non-LoRA): [bold]{len(report.skipped_keys)}[/]"
|
|
86
|
+
if report.skipped_keys
|
|
87
|
+
else ""
|
|
88
|
+
)
|
|
89
|
+
console.print(
|
|
90
|
+
Panel(
|
|
91
|
+
f"Converted LoRA keys: [bold]{report.converted_keys}[/]\n"
|
|
92
|
+
f"Output: [bold]{escape(report.output_dir)}[/]\n"
|
|
93
|
+
f"Signed: [bold]{report.signed}[/]{skipped_note}",
|
|
94
|
+
title="soup apple-adapter — converted",
|
|
95
|
+
border_style="green",
|
|
96
|
+
)
|
|
97
|
+
)
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"""`soup delinearize-llama4` — Llama 4 expert-weight reshape.
|
|
2
|
+
|
|
3
|
+
v0.44.0 shipped the planner; v0.71.21 (#97) lifts the live torch runtime
|
|
4
|
+
(load each shard → reshape fused 2-D expert weights to 3-D → atomic write
|
|
5
|
+
to ``--target``). ``--plan-only`` keeps the old render-and-exit flow.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from typing import Optional
|
|
11
|
+
|
|
12
|
+
import typer
|
|
13
|
+
from rich.console import Console
|
|
14
|
+
from rich.markup import escape
|
|
15
|
+
from rich.panel import Panel
|
|
16
|
+
|
|
17
|
+
from soup_cli.utils.delinearize_llama4 import (
|
|
18
|
+
is_llama4_model,
|
|
19
|
+
plan_delinearize,
|
|
20
|
+
run_delinearize,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
console = Console()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def delinearize_llama4(
|
|
27
|
+
source_dir: str = typer.Argument(
|
|
28
|
+
...,
|
|
29
|
+
help="Llama 4 checkpoint directory (containing *.safetensors).",
|
|
30
|
+
),
|
|
31
|
+
target_dir: str = typer.Option(
|
|
32
|
+
...,
|
|
33
|
+
"--target",
|
|
34
|
+
"-o",
|
|
35
|
+
help="Destination directory for the delinearized weights (under cwd).",
|
|
36
|
+
),
|
|
37
|
+
model_id: str = typer.Option(
|
|
38
|
+
None,
|
|
39
|
+
"--model-id",
|
|
40
|
+
help="Optional model id; warn if it doesn't look like a Llama 4 model.",
|
|
41
|
+
),
|
|
42
|
+
num_experts: Optional[int] = typer.Option(
|
|
43
|
+
None,
|
|
44
|
+
"--num-experts",
|
|
45
|
+
help=(
|
|
46
|
+
"Expert count for the reshape. Defaults to "
|
|
47
|
+
"config.json's num_local_experts."
|
|
48
|
+
),
|
|
49
|
+
),
|
|
50
|
+
plan_only: bool = typer.Option(
|
|
51
|
+
False,
|
|
52
|
+
"--plan-only",
|
|
53
|
+
help="Render the plan and exit without reshaping (v0.44.0 flow).",
|
|
54
|
+
),
|
|
55
|
+
) -> None:
|
|
56
|
+
"""Delinearize Llama 4 fused expert weights to 3-D form.
|
|
57
|
+
|
|
58
|
+
Live since v0.71.21 (#97): reshapes ``...experts.gate_up_proj`` /
|
|
59
|
+
``...experts.down_proj`` from ``[E*dim_in, dim_out]`` to
|
|
60
|
+
``[E, dim_in, dim_out]`` and copies JSON sidecars so the target stays
|
|
61
|
+
a loadable checkpoint.
|
|
62
|
+
"""
|
|
63
|
+
if model_id is not None and not is_llama4_model(model_id):
|
|
64
|
+
console.print(
|
|
65
|
+
f"[yellow]model id {escape(model_id)} doesn't match the Llama 4 "
|
|
66
|
+
"naming pattern - proceed only if you're sure.[/]"
|
|
67
|
+
)
|
|
68
|
+
try:
|
|
69
|
+
plan = plan_delinearize(source_dir, target_dir)
|
|
70
|
+
except (ValueError, FileNotFoundError) as exc:
|
|
71
|
+
console.print(f"[red]{escape(str(exc))}[/]")
|
|
72
|
+
raise typer.Exit(code=2) from exc
|
|
73
|
+
console.print(
|
|
74
|
+
Panel(
|
|
75
|
+
f"Weight files: {len(plan.weight_files)}\n"
|
|
76
|
+
f"Source dir: {escape(plan.source_dir)}\n"
|
|
77
|
+
f"Target dir: {escape(plan.target_dir)}",
|
|
78
|
+
title="Llama 4 Delinearization Plan",
|
|
79
|
+
border_style="cyan",
|
|
80
|
+
)
|
|
81
|
+
)
|
|
82
|
+
if plan_only:
|
|
83
|
+
return
|
|
84
|
+
|
|
85
|
+
try:
|
|
86
|
+
result = run_delinearize(plan, num_experts=num_experts)
|
|
87
|
+
except (TypeError, ValueError, FileNotFoundError) as exc:
|
|
88
|
+
console.print(f"[red]{escape(str(exc))}[/]")
|
|
89
|
+
raise typer.Exit(code=2) from exc
|
|
90
|
+
except ImportError as exc:
|
|
91
|
+
console.print(f"[red]{escape(str(exc))}[/]")
|
|
92
|
+
raise typer.Exit(code=1) from exc
|
|
93
|
+
|
|
94
|
+
console.print(
|
|
95
|
+
Panel(
|
|
96
|
+
f"Files written: {len(result.files_written)}\n"
|
|
97
|
+
f"Reshaped keys: {result.reshaped_keys}\n"
|
|
98
|
+
f"Already 3-D: {result.already_3d_keys}\n"
|
|
99
|
+
f"Passthrough keys: {result.passthrough_keys}\n"
|
|
100
|
+
f"Sidecars copied: {result.sidecars_copied}\n"
|
|
101
|
+
f"Target dir: {escape(result.target_dir)}",
|
|
102
|
+
title="Llama 4 Delinearization — done",
|
|
103
|
+
border_style="green",
|
|
104
|
+
)
|
|
105
|
+
)
|
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import os
|
|
6
6
|
from pathlib import Path
|
|
7
|
-
from typing import TYPE_CHECKING,
|
|
7
|
+
from typing import TYPE_CHECKING, List, Optional
|
|
8
8
|
|
|
9
9
|
import typer
|
|
10
10
|
|
|
@@ -792,25 +792,21 @@ def _run_deploy_autopilot_measure(
|
|
|
792
792
|
f"against {Path(tasks_file).name}...[/]"
|
|
793
793
|
)
|
|
794
794
|
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
return ""
|
|
800
|
-
|
|
801
|
-
def _placeholder_after_factory(candidate: str) -> Callable[[str], str]:
|
|
802
|
-
def _gen(prompt: str) -> str:
|
|
803
|
-
return ""
|
|
804
|
-
return _gen
|
|
805
|
-
|
|
806
|
-
# Pull injected generators if the caller registered them via env (escape
|
|
807
|
-
# hatch for tests + advanced operator workflows)
|
|
795
|
+
# Injected generators (test seam / advanced operator workflows) still win;
|
|
796
|
+
# otherwise v0.71.22 #143 first-party transformers factories load the real
|
|
797
|
+
# base (before) + per-candidate Quant-Menu-quantized model (after), lazily
|
|
798
|
+
# on first prompt so a cache hit never loads a model.
|
|
808
799
|
from soup_cli.utils import deploy_measure as _dm
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
800
|
+
|
|
801
|
+
injected_before = getattr(_dm, "_DEPLOY_MEASURE_BEFORE_GEN", None)
|
|
802
|
+
injected_after = getattr(_dm, "_DEPLOY_MEASURE_AFTER_FACTORY", None)
|
|
803
|
+
if injected_before is None and injected_after is None:
|
|
804
|
+
console.print(
|
|
805
|
+
"[dim]Using live transformers generators (greedy decode; models "
|
|
806
|
+
"load lazily per candidate)...[/]"
|
|
807
|
+
)
|
|
808
|
+
before_gen = injected_before or _dm.build_before_generator(base)
|
|
809
|
+
after_factory = injected_after or _dm.build_after_generator_factory(base)
|
|
814
810
|
|
|
815
811
|
try:
|
|
816
812
|
results, cache_hit = run_measure(
|
|
@@ -824,10 +820,18 @@ def _run_deploy_autopilot_measure(
|
|
|
824
820
|
except (TypeError, ValueError, FileNotFoundError) as exc:
|
|
825
821
|
console.print(f"[red]Measure failed:[/] {escape(str(exc))}")
|
|
826
822
|
raise typer.Exit(1) from exc
|
|
823
|
+
except (RuntimeError, ImportError, OSError) as exc:
|
|
824
|
+
# Model-load failures from the live factories (missing quant kernel,
|
|
825
|
+
# OOM, network) — friendly exit, no traceback dump.
|
|
826
|
+
console.print(f"[red]Live measure failed:[/] {escape(str(exc))}")
|
|
827
|
+
raise typer.Exit(1) from exc
|
|
827
828
|
|
|
828
829
|
console.print(render_measure_table(results))
|
|
829
830
|
if cache_hit:
|
|
830
|
-
console.print(
|
|
831
|
+
console.print(
|
|
832
|
+
"[dim](cache hit — delete ~/.soup/deploy_autopilot_cache.json or "
|
|
833
|
+
"change --tasks to refresh)[/]"
|
|
834
|
+
)
|
|
831
835
|
best = pick_best(results)
|
|
832
836
|
if best is not None:
|
|
833
837
|
console.print(
|