soup-cli 0.75.0__tar.gz → 0.75.1__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.75.0 → soup_cli-0.75.1}/.github/workflows/ci.yml +12 -1
- {soup_cli-0.75.0 → soup_cli-0.75.1}/CHANGELOG.md +18 -1
- {soup_cli-0.75.0 → soup_cli-0.75.1}/PKG-INFO +22 -34
- {soup_cli-0.75.0 → soup_cli-0.75.1}/README.md +21 -33
- {soup_cli-0.75.0 → soup_cli-0.75.1}/README.tr.md +25 -34
- {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/adapters-and-governance.md +2 -1
- {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/backends-and-ops.md +14 -1
- {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/commands.md +1 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/evaluation.md +2 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/performance-and-quantization.md +9 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/serving-and-export.md +14 -1
- {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/training.md +2 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/pyproject.toml +1 -1
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/__init__.py +1 -1
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cans/run.py +24 -3
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cans/schema.py +7 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cans/unpack.py +76 -7
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cli.py +42 -1
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cloud/lambda_labs.py +56 -6
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cloud/modal.py +117 -17
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/adapters.py +2 -1
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/can.py +15 -12
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/push.py +45 -19
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/runs.py +5 -2
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/serve.py +69 -18
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/config/schema.py +38 -12
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/gate.py +8 -1
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/experiment/tracker.py +13 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/mcp_server/execution.py +124 -10
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/mcp_server/registry.py +86 -24
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/ui/app.py +80 -1
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/ui/static/app.js +131 -82
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/ui/static/index.html +20 -19
- soup_cli-0.75.1/src/soup_cli/ui/static/safe_html.js +48 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_sign.py +9 -0
- soup_cli-0.75.1/src/soup_cli/utils/argv_redaction.py +163 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/audit_log.py +4 -1
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/hubs.py +31 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/layer_stream_runtime.py +174 -19
- soup_cli-0.75.1/src/soup_cli/utils/local_request_guard.py +133 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/lr_groups.py +6 -14
- soup_cli-0.75.1/src/soup_cli/utils/safe_regex.py +312 -0
- soup_cli-0.75.1/src/soup_cli/utils/yaml_limits.py +121 -0
- soup_cli-0.75.1/tests/test_adapter_trusted_key_backend.py +134 -0
- soup_cli-0.75.1/tests/test_argv_redaction_bundled_shorts.py +78 -0
- soup_cli-0.75.1/tests/test_audit_log_option_masking.py +135 -0
- soup_cli-0.75.1/tests/test_can_deploy_target_containment.py +115 -0
- soup_cli-0.75.1/tests/test_can_output_control_bytes.py +99 -0
- soup_cli-0.75.1/tests/test_can_read_limits.py +199 -0
- soup_cli-0.75.1/tests/test_cloud_output_dir_containment.py +154 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_code_review_critical.py +2 -2
- soup_cli-0.75.1/tests/test_config_regex_limits.py +283 -0
- soup_cli-0.75.1/tests/test_hub_push_credentials.py +135 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_inference_advanced.py +5 -5
- soup_cli-0.75.1/tests/test_issue1005_peft021_canonical_names.py +283 -0
- soup_cli-0.75.1/tests/test_issue1005_peft021_review_round.py +350 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue369_canonical_named_parameters.py +23 -15
- soup_cli-0.75.1/tests/test_judge_key_scoping.py +59 -0
- soup_cli-0.75.1/tests/test_lambda_submit_interrupt.py +335 -0
- soup_cli-0.75.1/tests/test_local_request_guard.py +102 -0
- soup_cli-0.75.1/tests/test_mcp_capacity_all_runs.py +91 -0
- soup_cli-0.75.1/tests/test_mcp_digest_no_follow.py +292 -0
- soup_cli-0.75.1/tests/test_mcp_plan_inputs.py +230 -0
- soup_cli-0.75.1/tests/test_mcp_post_spawn_failure.py +130 -0
- soup_cli-0.75.1/tests/test_modal_stub_outputs.py +321 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_part_a_wave1.py +19 -0
- soup_cli-0.75.1/tests/test_runs_clean_keep_weights.py +177 -0
- soup_cli-0.75.1/tests/test_safe_regex.py +240 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_serve.py +2 -2
- soup_cli-0.75.1/tests/test_serve_local_request_guard.py +307 -0
- soup_cli-0.75.1/tests/test_ui_rendering_escapes.py +184 -0
- soup_cli-0.75.1/tests/test_ui_security_headers.py +203 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0536.py +1 -1
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0537.py +20 -20
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07135.py +1 -1
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07201.py +11 -9
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07202.py +2 -2
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07203.py +11 -5
- soup_cli-0.75.1/tests/test_yaml_expanded_limit.py +283 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/.dockerignore +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/.gitattributes +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/FUNDING.yml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/constraints/transformers-floor.txt +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/pull_request_template.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/workflows/dependency-drift.yml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/workflows/docker.yml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/workflows/publish.yml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/workflows/recipe-repo-ids.yml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/.github/workflows/recipe-validation.yml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/.gitignore +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/.mailmap +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/.pre-commit-config.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/AGENTS.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/CODEOWNERS +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/CODE_OF_CONDUCT.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/CONTRIBUTING.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/CONTRIBUTORS.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/Dockerfile +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/LICENSE +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/NOTICE +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/SECURITY.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/README.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/bench_validator.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-395-second-stack-vram.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-655-pinned-store-accounting.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-674-quest-w4a4-sft.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-h100-validation.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-qwen4-ple-m4-max.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-v0.72.0-layer-streaming.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-v0.72.2-nf4.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-v0.72.3-breadth.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-v0.72.4-preference-losses.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-v0.73.1-measured-vram-fit.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/gate-v0.73.2-leg2-scoring.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/harness/bitexact.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/harness/bnb_repro.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/harness/fsdp_sharding_probe.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/harness/issue331_qlora_scope.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/harness/issue395_second_stack_vram.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/harness/mlx_sft_smoke.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/probe-v0.73.0-what-bounds-streaming.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/run-m1-8gb-mlx-sft.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/benchmarks/run-t4-colab-free-tier.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/changelog.d/README.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/docker-compose.yml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/README.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/assets/layer-streaming.gif +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/assets/web-ui-new-training.png +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/autodistill.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/compliance.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/data.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/models.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/docs/peft-and-efficiency.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/README.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/configs/dpo_chat.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/configs/dpo_example.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/configs/grpo_reasoning.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/configs/rlhf_step1_sft.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/configs/rlhf_step2_reward.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/configs/rlhf_step3_ppo.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/configs/sft_basic.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/configs/vision_llama.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/data/README.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/data/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/data/chat_preferences.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/data/dpo_sample.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/data/reasoning_math.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/reward_hacking/rewards.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/synthetic_workflow.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/examples/synthetic_workflow.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/notebooks/proof-4gb.ipynb +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/scripts/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/scripts/assemble_changelog.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/scripts/autodistill_b1_hardware_smoke.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/scripts/check_recipe_repo_ids.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/scripts/generate_recipe_snapshot.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/soup.png +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/soup_logo_svg.svg +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/__main__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autodistill/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autodistill/capture.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autodistill/contract.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autodistill/fingerprints.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autodistill/mlx_worker.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autodistill/publisher.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autopilot/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autopilot/analyzer.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autopilot/decisions.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/autopilot/generate_config.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cans/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cans/pack.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cans/publish.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cans/verify.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cloud/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/cloud/_common.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/_eval_v0550.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/_eval_v0610.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/_eval_v0650.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/_eval_v07110.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/_webhook_cli.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/ab.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/active_sample.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/advise.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/agent.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/airgap.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/apple_adapter.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/attest.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/audit_log.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/autopilot.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/bench.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/bom.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/build.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/card.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/chat.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/ci.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/compile_cmd.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/compile_tools.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/completions.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/cost.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/data.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/data_canary.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/data_doctor.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/data_forge.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/data_mix.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/data_score.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/data_topics.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/delinearize_llama4.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/deploy.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/diagnose.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/diff.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/distill_prompt.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/doctor.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/draft.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/drift_alarm.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/edit.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/env.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/eval.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/expect.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/export.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/fetch.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/generate.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/history.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/infer.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/ingest.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/init.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/iterative_dpo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/license_advisor.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/llama.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/local_rl.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/lock.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/loop.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/mcp.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/merge.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/merge_sharded_fsdp_weights.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/migrate.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/monitor.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/plan.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/plugins.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/probe.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/profile.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/prune_prompt.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/quantize.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/quickstart.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/ra_dit.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/recipes.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/registry.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/reward.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/ship.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/shrink.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/spectrum.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/steer.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/sweep.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/tokenizer.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/train.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/tui.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/tunability.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/ui.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/commands/why.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/config/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/config/backend_support.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/config/loader.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/config/unknown_keys.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/alpaca_tiny.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/behavior/elephant.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/behavior/harmbench.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/behavior/jailbreakbench.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/behavior/syceval.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/behavior/xstest.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/chat_preferences.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/dpo_sample.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/gate/format_json.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/gate/over_refusal.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/gate/safety.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/gate/tool_call.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/reasoning_math.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/unlearning/muse_demo.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/unlearning/tofu_demo.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/_fixtures/unlearning/wmdp_demo.jsonl +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/augment.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/chat_templates.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/collators.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/formats.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/loader.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/loss_mask.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/providers/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/providers/_utils.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/providers/anthropic.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/providers/ollama.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/providers/vllm.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/sft_format.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/templates/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/templates/code.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/templates/conversation.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/templates/preference.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/templates/qa.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/templates/reasoning.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/templates/tool_calling.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/templates/verifiable.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/traces/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/traces/pair_builder.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/traces/parsers.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/traces/quality.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/data/validator.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/envs/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/envs/_common.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/envs/calculator.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/envs/guess_number.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/envs/retrieval_qa.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/aider_polyglot.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/arena.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/benchmarks_v0_43.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/calibrate.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/checkpoint_intelligence.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/custom.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/forgetting.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/gate_suites.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/human.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/judge.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/leaderboard.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/eval/quant_check.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/experiment/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/mcp_server/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/mcp_server/server.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/migrate/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/migrate/axolotl.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/migrate/common.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/migrate/llamafactory.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/migrate/unsloth.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/monitoring/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/monitoring/callback.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/monitoring/curriculum_callback.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/monitoring/display.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/monitoring/grpo_stability_callback.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/monitoring/hf_push.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/monitoring/plugin_callback.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/monitoring/trace_logger.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/plugins/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/py.typed +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/recipes/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/recipes/catalog.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/registry/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/registry/attach.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/registry/diff.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/registry/hashing.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/registry/store.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/audio.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/bco.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/chat.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/code.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/embedding.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/eu-ai-act.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/fetch_examples/llama-3.1-8b-lora.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/fetch_examples/qwen2.5-7b-dpo.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/fetch_examples/zero3-cpu-offload.json +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/hipaa.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/ipo.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/kto.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/longcontext.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/manifest.json +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/medical.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/moe.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/orpo.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/pretrain.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/reasoning.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/rlhf.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/simpo.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/soc2.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/sr-11-7.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/tool-calling.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/templates/vision.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/_trl_compat.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/asr.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/bco.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/bitnet.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/classifier.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/distill.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/dpo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/embedding.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/grpo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/ipo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/kto.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/mlx_dpo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/mlx_grpo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/mlx_masking.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/mlx_optim.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/mlx_routing.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/mlx_sft.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/mole_routing.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/online_dpo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/orpo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/ppo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/preference.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/pretrain.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/prm.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/raft.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/reward_model.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/rewards.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/sft.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/simpo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/stream_setup.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/tts.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/trainer/unlearn.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/tui_app.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/ui/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/ui/plugins/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/ui/static/logo.png +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/ui/static/logo.svg +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/ui/static/style.css +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/_eval_text.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ab_test.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/activation_offload.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/active_sampler.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_arithmetic.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_bisect.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_branch.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_diff.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_fuse.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_merge.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_pr.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/adapter_scan.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/advanced_precision.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/advise.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/advise_history.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/agent_forge.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/agent_rollout.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/agent_sandbox.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/airgap_bundle.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/annex_xi.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/anthropic_messages.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/apple_adapter.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/asr_metrics.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/attest.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/auto_quant.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/backend_detect.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/batch_probe.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/behavior_battery.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/best_of_n.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/best_of_n_artifact.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/best_of_n_checkpoint.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/best_of_n_stream.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/bitnet.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/blame.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/block_expansion.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/bom.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/brain_rot.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/brain_rot_lang.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/build_dag.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/canary.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/canary_discovery.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/canary_router.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/capability_suite.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/checklist_dsl.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/checkpoint_trigger.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ci_workflow.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/citation_faithful.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/classifier.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/cmaes_merge.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/compile_tools.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/completions.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/constants.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/convergence.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/crash.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/cross_doc_attn.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/curriculum.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/curriculum_dynamic.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/cut_ce.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/data_doctor.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/data_forge.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/data_lint.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/data_mix.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/data_pipeline.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/data_score.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/deepspeed.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/delinearize_llama4.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/demo_bundles.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/deploy_autopilot.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/deploy_measure.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/_common.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/badge.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/citation.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/contamination.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/forgetting.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/format.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/live.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/memorization.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/mode_collapse.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/refusal.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/report.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/diagnose/runner.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/distill.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/dpo_variants.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/draft.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/drift_alarm.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ebft_gdpo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/echo_trap.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/edit_diff.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/edit_governor.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/edit_kernels.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/embed.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/encoding.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/energy.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/env_lock.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/errors.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/eval_design.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/eval_gate_hook.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/eval_lock_coverage.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/evolve.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/expectations.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/fetch_examples.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/flash_attn.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/fp8.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/freeze.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/fsdp.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/fsdp_consolidate.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/galore.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/gguf_quant.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/gpu.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/gpu_monitor.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/grace_codebook.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/graceful_save.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/grad_accum.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/gradient_ckpt.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/grpo_long_context.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/grpo_variants.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/hardware_fit.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/harm_probe.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/hf.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/hf_space.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ingest_pull.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ingest_sources.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/integrations.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/interference.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/interference_live.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/irt.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/iterative_dpo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/jinja_analyzer.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/kernel_picker.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/knowledge_edit.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/kv_cache.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/launcher.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/layer_shard.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/layer_stream.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/license_advisor.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/license_matrix.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/liger.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/lisa.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/live_eval.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/llama_proxy.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/llama_server_timings.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/local_rl.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/local_rl_scheduler.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/loftq_init.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/log_level.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/long_context.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/longlora.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/loop_budget.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/loop_daemon.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/loop_iteration.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/loop_stages.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/loop_state.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/lr_finder.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/magpie.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/metrics.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/mii.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/minillm.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/mix_proxy.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/mixed_precision.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/mlx.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/mod.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/moe.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/moe_quant.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/mole_routing.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/multipack.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/multipack_sampler.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/multipack_trainer.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/namespace_pin.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/neat_packing.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/net_guard.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ngram_spec.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/nlg_metrics.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ollama.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/onboarding.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/optimizer_zoo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/oq_affine.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/paths.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/peft_builder.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/peft_patches.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/peft_wiring.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/persona_hub.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/pipeline.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/plotext_compat.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/preference_combine.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/prm.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/prm_reward.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/probe_kernel.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/probe_pack.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/process_liveness.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/profiler.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/profiling.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/profiling_v0_43.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/prompt_compile.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/prompt_distill.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/prune_prompt.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/qat.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/qr_url.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/quality.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/quant_menu.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/qwen4_compat.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/qwen4_ple.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ra_dit.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ra_dit_run.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/raft.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/reasoning_effort.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/reasoning_parser.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/recipe_dag.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/recipe_run.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/registry.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/rehearsal.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/relora.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/replay.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/repro_receipt.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/reward_hack_control.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/reward_hacking.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/reward_stress.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/reward_synth.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ring_attention.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/rl_checkpoint.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/rl_signal_buffer.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/run_cost.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/sae_diff.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/save_formats.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/seeding.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/semdedup.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/server_tools.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/sglang.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ship_verdict.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/shortcuts.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/shrink.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/signing.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/sleeper_probe.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/soup_lock.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/spec_pairing.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/spectrum_scan.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/spike_recovery.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/sse_train_stream.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/steering.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/strict_safetensors.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/structured_output.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/sweep_config.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/tail_latency.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/terminal.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/terraform_plan.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/tool_outputs.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/topics.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/topology.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/tracing.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/trackers.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/train_event_buffer.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/trainer_plugins.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/trust_remote.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/truth_probe.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/tts.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/tts_codec.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/tunability.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/ui_env.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/uld.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/unlearn_kernels.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/unlearning.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/unlearning_eval.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/unsloth.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/v028_features.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/vector_bank.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/vllm.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/vscode_setup.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/warmup.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/webhooks.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/src/soup_cli/utils/why.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/templates/chat.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/templates/code.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/templates/medical.yaml +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/__init__.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/_windows_ci.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/conftest.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/fixtures/autodistill/v1/capture_token.json +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/fixtures/autodistill/v1/consumption_ledger.json +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/fixtures/autodistill/v1/plan.json +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/fixtures/autodistill/v1/shard_manifest.json +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/fixtures/autodistill/v1/student_rollout_capture_token.json +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/fixtures/issue204_langfuse_observations_v2_page.json +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/fixtures/recipe_config_snapshots.json +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/mcp_roundtrip.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/qa/v053_qa.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/qa/v07114_qa.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/qa/v0716_qa.md +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_adapters.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_advanced_peft.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_align_trainable_dtype.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_assistant_mask.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_audio.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_auto_tuning.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_autopilot.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_awq_gptq_export.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_batch_probe.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_bco.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_bench.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_brain_rot_multilingual.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_bugfixes.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_build_dag.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_callback.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_cans.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_chat.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_chat_template.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_cli.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_cli_help_assertions_are_ansi_safe.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_cli_startup_is_light.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_cli_subprocess.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_code_review_deferred.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_code_review_high.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_code_review_medium_low.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_code_review_recurring.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_config.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_contributing_test_counts_are_digit_free.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_cost.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_crash_reporter.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_curriculum.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_data.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_data_augment.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_data_sample.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_data_split.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_data_tools.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_dataset_hub.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_dataset_registry.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_deepspeed.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_demo_bundle_metadata.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_deploy_ollama.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_device_map_distributed.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_diff.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_display.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_doctor.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_dpo_example.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_dpo_variants.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_embedding.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_errors.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_eval.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_eval_gate.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_eval_platform.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_examples_configs.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_export.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_formats.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_fp8_recipe.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_freeze_training.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_generate.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_gpu.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_grpo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_hf_integration.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_infer.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_init.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_ipo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue144_gguf_export.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue204_langfuse_pull.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue23_mlx_display_bridge.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue23_mlx_harness_bridge.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue23_mlx_val_loss_producer.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue264_cloud.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue296_network_transport.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue300_online_dpo_kwargs.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue300_online_dpo_train.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue302_vision_pad_token.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue304_cross_tokenizer.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue305_mixed_rank_arithmetic.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue308_callback_subclass.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue316_refusal_apostrophe.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue316_suites.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue320_lazy_callback_import.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue322_mcp2_compat.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue323_trl_kwarg_drift.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue327_logits_estimate.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue330_mix_recipe_train_loadable.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue332_vllm_prompt.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue334_fa3_detection.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue336_deepspeed_lora.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue339_load_dtype.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue341_seed_and_fullft.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue348_calibrated_logits_wiring.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue349_measured_fit.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue350_fsdp_qlora.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue352_fsdp_peft_checkpoint.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue353_mlx_seed_warning.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue353_seed_every_task.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue359_deepspeed_guard_coverage.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue360_sglang_prompt_finish_reason.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue367_live_eval_quantization.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue372_no_reexec_hint.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue373_fsdp_sharding_probe.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue374_stream_disk_preflight.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue377_lisa_train_embeddings.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue382_windows_ci_guard_is_shared.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue385_stream_dtype.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue389_torchao_error.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue390_expandable_segments_reason.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue392_mlx_target_keys.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue394_mlx_runtime_isolation.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue401_orphaned_run_reconcile.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue402_restart_capacity.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue404_baseline_scorer_stamp.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue423_mlx_device_detection.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue424_windows_liveness.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue427_qwen35_text_modality.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue433_meta_adapter_guard.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue441_coerce_token_ids.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue443_interleave_wiring.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue459_interleave_streaming_hub.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue477_qwen38_catalog.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue487_changelog_fragments.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue491_frozen_base_load_dtype.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue502_qwen35_transformers5.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue505_launching_window_blocks_restart.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue524_launching_reconcile.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue531_stream_base_provenance.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue532_supervised_token_guard.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue533_offline_hf_materialization.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue534_apple_nvme.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue546_transient_finite_metric.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue549_bon_resume.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue550_bon_offline.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue555_bon_stream_resume.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue563_mps_bf16_training.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue565_grpo_reward_metadata.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue567_grpo_mps_bf16.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue571_qwen4_exp.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue573_qwen4_expert_lora.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue580_autodistill_capture.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue580_autodistill_contract.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue580_autodistill_fingerprints.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue580_autodistill_mlx_worker.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue580_autodistill_publisher.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue599_telemetry_dns_ssrf.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue600_abbreviated_ipv4_ssrf.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue602_qwen4_ple_streaming.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue616_net_guard_is_shared.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue621_recipe_snapshot.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue623_stream_pin_allocation.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue627_unknown_config_keys.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue633_ansi_in_highlighted_output.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue634_mlx_resume.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue636_torch_floor.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue642_sweep_dry_run.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue649_batch_probe_peak_gate.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue654_batch_probe_uncovered_branches.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue676_non_dict_messages.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue677_recipe_repo_id_guard.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue681_uld_id_compat.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue682_uld_loss_label_mask.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue683_mlx_response_masking.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue684_mlx_grad_accumulation.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue685_mlx_grad_checkpoint.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue686_mlx_optimizer_schedule.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue687_ui_auth.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue688_ui_drain.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue689_hub_streaming.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue690_embedding_trainer_attrs.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue691_sft_packing.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue695_validate_agrees_with_loader.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue700_embedding_lora_zero.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue721_ppo_config_forwarding.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue723_sequence_gspo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue724_loraplus_optimizer.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue724_loraplus_wiring_coverage.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue731_ui_docs_bind.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue748_config_fields_reach_a_consumer.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue752_cli_commands_called_as_functions.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue755_backend_support_registry.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue771_validator_fast_path.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue775_path_containment_ratchet.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue781_inference_bos.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue811_data_validate_exit_codes.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue91_aider_eval.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_issue99_apple_monitor.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_jinja_analyzer.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_kto.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_loader.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_log_level.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_loss_watchdog.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_mcp_execute.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_merge.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_migrate.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_mii_serve.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_mlx_backend.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_mlx_dispatch.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_mlx_max_grad_norm.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_moe.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_multi_adapter.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_multi_gpu.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_multipack_config.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_multipack_ffd_placement.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_multipack_invariants.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_multipack_sampler.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_neat_packing.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_neftune_rslora.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_no_foreign_license_headers.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_onnx_tensorrt_export.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_orpo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_packing.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_part_a_wave2.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_part_d.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_part_e.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_part_f_hardening.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_peft_methods.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_peft_patches.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_performance.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_pissa_init.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_plotext_compat.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_ppo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_preference_dispatcher.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_preference_multi.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_preference_multi_runtime.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_pretrain.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_profile.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_profiling.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_progress.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_push.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_qat.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_quality_filter.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_quant_check.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_quant_menu.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_quickstart.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_qwen35_streaming.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_rank_pattern.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_readme_translation_sync.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_recipe_count_is_synced.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_recipes.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_recipes_v031.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_refusal_multilingual.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_registry.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_relora.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_replay.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_requires_python_bound.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_resume.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_review_fixes_v07133.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_rlvr.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_run_cost.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_runs.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_semantic_split.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_server_generate.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_sglang_serve.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_sglang_trust_contract.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_simpo.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_smoke_train.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_speculative_decoding.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_stream_multi_gpu_guard.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_sweep.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_synth_data_pro.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_telemetry_ssrf.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_templates_yaml.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_tensorboard.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_tool_calling.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_trace_to_pref.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_tracker.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_trainer_coverage_v035.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_trainer_init.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_training_intelligence.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_training_speed.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_transformers_floor_compat.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_trl_preference_config_contract.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_trl_version_compat.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_trust_remote_code.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_tui.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_ui.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_ui_chat.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_ui_config_builder.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_ui_live_monitor.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_ui_metrics.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_unsloth.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0401_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0401_part_d.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0401_part_e.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0402_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0402_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0403_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0403_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0403_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0404_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0404_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0405_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0406_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0410_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0410_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0410_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0420.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0430_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0430_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0430_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0430_part_d.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0440_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0440_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0440_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0440_part_d.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0440_review_followups.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0450.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0460_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0460_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0470_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0470_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0480_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0480_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0490.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0500_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0500_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0500_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0500_part_d.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0500_part_e.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0510.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0520.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0530.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v05310.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v05311.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0531_109.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0531_139.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0531_142.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0531_82.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0532.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0533.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0534.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0535.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0538.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0539.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0540.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0550.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0550_followups.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0560.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0570_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0570_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0570_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0570_part_d.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0580.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0590.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0600_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0600_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0600_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0600_part_d.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0600_part_e.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0600_part_f.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0610_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0610_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0610_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0610_part_d.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0610_part_e.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0620_followups.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0620_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0620_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0620_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0620_part_d.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0620_part_e.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0630_followups.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0630_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0630_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0630_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0630_part_d.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0630_part_e.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0631_206.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0640_followups.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0640_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0640_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0640_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0640_part_d.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0640_part_e.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0640_part_f.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0650_followups.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0650_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0650_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0650_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0650_part_d.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0650_part_e.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0660_cli.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0660_followups.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0660_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0660_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0660_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0660_part_d.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0660_part_e.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0670_followups.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0670_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0670_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0670_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0670_part_d.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0670_part_e.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0670_part_f.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0680_followups.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0680_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0680_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0680_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0680_part_d.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0680_part_e.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0690_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0690_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0690_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0690_part_d.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0690_part_e.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0700_part_a.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0700_part_b.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0700_part_c.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0700_part_d.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0700_part_e.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0700_part_f.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07110.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07111.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07112.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07113.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07114.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07115.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07116.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07117.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07118.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07119.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0712.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07120.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07121.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07122.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07123.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07124.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07125.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07126.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07127.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07128.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07129.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0713.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07130.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07131.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07132.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07133.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07134.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07136.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07137.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07138.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07139.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0714.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07140.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07141.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07141_telemetry_prompt.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0715.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0716.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0717.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0718.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v0719.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07200.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07204.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07300.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_v07302.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_val_loss_end_to_end.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_validator.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_version_sync.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_vision.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_vllm_serve.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_warmup.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_why.py +0 -0
- {soup_cli-0.75.0 → soup_cli-0.75.1}/tests/test_windows_encoding.py +0 -0
|
@@ -2,7 +2,11 @@ name: CI
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
|
-
|
|
5
|
+
# `release/**` is here so a release branch gets the matrix on the exact
|
|
6
|
+
# tree that will be tagged. A pull request builds the MERGE of head and
|
|
7
|
+
# main, which for a release cut from an older tag is not the tree that
|
|
8
|
+
# ships, so a PR run cannot stand in for this one.
|
|
9
|
+
branches: [main, 'release/**']
|
|
6
10
|
pull_request:
|
|
7
11
|
branches: [main]
|
|
8
12
|
|
|
@@ -236,6 +240,13 @@ jobs:
|
|
|
236
240
|
- uses: actions/setup-python@v5
|
|
237
241
|
with:
|
|
238
242
|
python-version: ${{ matrix.python-version }}
|
|
243
|
+
# The Web UI escaping tests run `safe_html.js` under node, and skip when
|
|
244
|
+
# node is absent. Runner images happen to ship one, so the skip would be
|
|
245
|
+
# silent: pin it, or the only tests that execute the real escaping logic
|
|
246
|
+
# can disappear without anything turning red.
|
|
247
|
+
- uses: actions/setup-node@v4
|
|
248
|
+
with:
|
|
249
|
+
node-version: "22"
|
|
239
250
|
- name: Pin the HF cache to a deterministic path
|
|
240
251
|
# Set here and not in the job-level `env:` block: the `runner` context
|
|
241
252
|
# is not available there (only github / needs / strategy / matrix /
|
|
@@ -12,6 +12,22 @@ reproducing 70+ versions of notes.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.75.1] - 2026-09-21
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- **A layer-streamed LoRA adapter saved as ZERO tensors under peft 0.21.0 (#1005 in #1010).** peft 0.21 selects an adapter's tensors by the prefixes it reads off `model.named_modules()` and keeps the matching `state_dict()` entries, where 0.20 filtered by the `lora_` substring; the streaming wrapper's module and parameter names carried `.inner.` while its `state_dict()` keys were canonical, so `trainer.save_model()`, every `save_steps` checkpoint and `get_peft_model_state_dict()` returned nothing, and nothing raised. The wrapper now enumerates the inner layer's tree at its own prefix (`named_modules()` / `named_children()`, with `train()` / `apply()` / `_apply()` reaching the inner layer explicitly), so names and keys are one spelling — which also keeps transformers' weight-decay grouping, built from `named_children()`, from silently dropping every LoRA parameter into the no-decay group. **Any adapter saved with `stream_layers: true` on peft>=0.21 before this fix holds zero tensors (a 40-byte `adapter_model.safetensors`, no error at save time) and cannot be recovered — re-train it on a Soup with this fix, or with `peft<0.21`.** Naming only; nothing on the streamed forward path changes. Ten peft-version-independent tests pin names == keys against a resident LoRA model; the four tests that documented the old asymmetry are inverted rather than deleted. No `peft<0.21` pin.
|
|
20
|
+
|
|
21
|
+
- **A Ctrl+C arriving immediately after the Lambda controller started could still leave the instance running (#1073 in #1078).** `submit_lambda_run` spawned the controller outside the `try` that absorbs interrupts, so a SIGINT delivered between `Popen` returning and the waiting loop being entered — or one landing on the "still waiting" notice, which is written from the interrupt handler — unwound the parent while the controller was still terminating the paid instance in its `finally` block. The spawn and the notice now sit inside the guarded region: once the child exists, every path leads back to `proc.wait()` and the controller's exit code remains what the function returns. An interrupt raised before the child exists still propagates unchanged, and a `wait()` failure that is not an interrupt still surfaces rather than being retried.
|
|
22
|
+
|
|
23
|
+
- `soup runs clean` now accepts `--no-keep-weights` to delete whole non-best checkpoints; `--keep-weights` (the default) keeps weights on every supported Click version — on Click 8.1 it previously deleted whole checkpoints (#1057)
|
|
24
|
+
|
|
25
|
+
- **Cloud runs keep their outputs and their cleanup (#1058).** `soup train --cloud modal` now writes run outputs to the `soup-outputs` Modal volume and downloads them to the local output directory when the run ends (also after a failed run); previously checkpoints were lost with the container. `soup train --cloud lambda --cloud-submit`: pressing Ctrl+C now waits for the controller to terminate the Lambda instance; previously the controller was killed 0.25 s later and the instance could keep running (Linux/macOS).
|
|
26
|
+
|
|
27
|
+
### Security
|
|
28
|
+
|
|
29
|
+
- Hardening across the CLI, the inference server, the Web UI, MCP execution, config parsing and `.can` handling. A security advisory with details and upgrade guidance will be published alongside this release.
|
|
30
|
+
|
|
15
31
|
## [0.75.0] - 2026-09-12
|
|
16
32
|
|
|
17
33
|
### Added
|
|
@@ -4650,7 +4666,8 @@ what a fine-tune forgets and leaks.
|
|
|
4650
4666
|
`SECURITY.md` (~220 KB). `SECURITY.md` is now a concise security policy; the
|
|
4651
4667
|
detailed hardening notes remain in git history and the GitHub Releases notes.
|
|
4652
4668
|
|
|
4653
|
-
[Unreleased]: https://github.com/MakazhanAlpamys/Soup/compare/v0.75.
|
|
4669
|
+
[Unreleased]: https://github.com/MakazhanAlpamys/Soup/compare/v0.75.1...HEAD
|
|
4670
|
+
[0.75.1]: https://github.com/MakazhanAlpamys/Soup/compare/v0.75.0...v0.75.1
|
|
4654
4671
|
[0.75.0]: https://github.com/MakazhanAlpamys/Soup/compare/v0.74.0...v0.75.0
|
|
4655
4672
|
[0.74.0]: https://github.com/MakazhanAlpamys/Soup/compare/v0.73.3...v0.74.0
|
|
4656
4673
|
[0.73.1]: https://github.com/MakazhanAlpamys/Soup/compare/v0.73.0...v0.73.1
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: soup-cli
|
|
3
|
-
Version: 0.75.
|
|
3
|
+
Version: 0.75.1
|
|
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
|
|
@@ -241,39 +241,27 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
241
241
|
|
|
242
242
|
## What's New
|
|
243
243
|
|
|
244
|
-
**v0.75.
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
- **
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
and displayed.
|
|
266
|
-
- **Breaking: `grpo_variant: gspo` is the published sequence-level objective**
|
|
267
|
-
(arXiv:2507.18071), replacing a column-centering heuristic in which a padding token also
|
|
268
|
-
shifted the gradient of every row sharing its column. Existing gspo configs will not
|
|
269
|
-
reproduce prior runs.
|
|
270
|
-
- **Web UI read endpoints and SSE require auth**, with short-lived single-use tickets
|
|
271
|
-
instead of a token in a query string; `--public` no longer serves `/docs` and
|
|
272
|
-
`/openapi.json` to the LAN; and a training subprocess no longer hangs when nothing
|
|
273
|
-
reads its output.
|
|
274
|
-
- **`torch>=2.6.0`** closes v0.74.0's known limitation: at 2.5.1 `trl>=0.29` could not
|
|
275
|
-
import and every preference trainer was dead. Also fixed: `training.loraplus_lr_ratio`
|
|
276
|
-
crashed every run that set it, and `packing: true` raised on TRL 0.29.
|
|
244
|
+
**v0.75.1 — hardening, and cloud runs that keep what they produced.** A maintenance
|
|
245
|
+
release on top of v0.75.0: no new training features, and a few defaults that change when
|
|
246
|
+
you upgrade.
|
|
247
|
+
|
|
248
|
+
- **Hardening across the CLI, the inference server, the Web UI, MCP execution, config
|
|
249
|
+
parsing and `.can` handling.** Details in an advisory published with this release.
|
|
250
|
+
- **`soup runs clean` gained `--no-keep-weights`**, which deletes whole non-best
|
|
251
|
+
checkpoints rather than only their optimizer and scheduler states. `--keep-weights`
|
|
252
|
+
stays the default and now means the same thing on every supported Click version — on
|
|
253
|
+
Click 8.1 it used to delete whole checkpoints anyway.
|
|
254
|
+
- **Cloud runs keep their outputs.** `soup train --cloud modal` writes run outputs to the
|
|
255
|
+
`soup-outputs` Modal volume and downloads them into your local output directory when the
|
|
256
|
+
run ends, including after a failed run; checkpoints used to disappear with the container.
|
|
257
|
+
- **Ctrl+C on `soup train --cloud lambda --cloud-submit` waits for the controller** to
|
|
258
|
+
terminate the Lambda instance. The controller was previously killed a quarter of a
|
|
259
|
+
second later, which could leave a paid instance running (Linux/macOS).
|
|
260
|
+
- **Upgrading changes a few defaults.** `soup push --hub modelscope` and `--hub modelers`
|
|
261
|
+
read `MODELSCOPE_API_TOKEN` and `MODELERS_TOKEN` rather than `HF_TOKEN`, so one hub's
|
|
262
|
+
token is never offered to another; and an `https` judge URL whose host is not
|
|
263
|
+
`api.openai.com` is treated as an OpenAI-compatible server and called without
|
|
264
|
+
`OPENAI_API_KEY`.
|
|
277
265
|
|
|
278
266
|
> Python **3.10–3.12** only. On 3.13+, pip used to resolve untested PyTorch wheels that
|
|
279
267
|
> crash in the native extension before Soup runs at all.
|
|
@@ -87,39 +87,27 @@ infrastructure instead of improving models. Soup fixes that.
|
|
|
87
87
|
|
|
88
88
|
## What's New
|
|
89
89
|
|
|
90
|
-
**v0.75.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
- **
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
and displayed.
|
|
112
|
-
- **Breaking: `grpo_variant: gspo` is the published sequence-level objective**
|
|
113
|
-
(arXiv:2507.18071), replacing a column-centering heuristic in which a padding token also
|
|
114
|
-
shifted the gradient of every row sharing its column. Existing gspo configs will not
|
|
115
|
-
reproduce prior runs.
|
|
116
|
-
- **Web UI read endpoints and SSE require auth**, with short-lived single-use tickets
|
|
117
|
-
instead of a token in a query string; `--public` no longer serves `/docs` and
|
|
118
|
-
`/openapi.json` to the LAN; and a training subprocess no longer hangs when nothing
|
|
119
|
-
reads its output.
|
|
120
|
-
- **`torch>=2.6.0`** closes v0.74.0's known limitation: at 2.5.1 `trl>=0.29` could not
|
|
121
|
-
import and every preference trainer was dead. Also fixed: `training.loraplus_lr_ratio`
|
|
122
|
-
crashed every run that set it, and `packing: true` raised on TRL 0.29.
|
|
90
|
+
**v0.75.1 — hardening, and cloud runs that keep what they produced.** A maintenance
|
|
91
|
+
release on top of v0.75.0: no new training features, and a few defaults that change when
|
|
92
|
+
you upgrade.
|
|
93
|
+
|
|
94
|
+
- **Hardening across the CLI, the inference server, the Web UI, MCP execution, config
|
|
95
|
+
parsing and `.can` handling.** Details in an advisory published with this release.
|
|
96
|
+
- **`soup runs clean` gained `--no-keep-weights`**, which deletes whole non-best
|
|
97
|
+
checkpoints rather than only their optimizer and scheduler states. `--keep-weights`
|
|
98
|
+
stays the default and now means the same thing on every supported Click version — on
|
|
99
|
+
Click 8.1 it used to delete whole checkpoints anyway.
|
|
100
|
+
- **Cloud runs keep their outputs.** `soup train --cloud modal` writes run outputs to the
|
|
101
|
+
`soup-outputs` Modal volume and downloads them into your local output directory when the
|
|
102
|
+
run ends, including after a failed run; checkpoints used to disappear with the container.
|
|
103
|
+
- **Ctrl+C on `soup train --cloud lambda --cloud-submit` waits for the controller** to
|
|
104
|
+
terminate the Lambda instance. The controller was previously killed a quarter of a
|
|
105
|
+
second later, which could leave a paid instance running (Linux/macOS).
|
|
106
|
+
- **Upgrading changes a few defaults.** `soup push --hub modelscope` and `--hub modelers`
|
|
107
|
+
read `MODELSCOPE_API_TOKEN` and `MODELERS_TOKEN` rather than `HF_TOKEN`, so one hub's
|
|
108
|
+
token is never offered to another; and an `https` judge URL whose host is not
|
|
109
|
+
`api.openai.com` is treated as an OpenAI-compatible server and called without
|
|
110
|
+
`OPENAI_API_KEY`.
|
|
123
111
|
|
|
124
112
|
> Python **3.10–3.12** only. On 3.13+, pip used to resolve untested PyTorch wheels that
|
|
125
113
|
> crash in the native extension before Soup runs at all.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- synced-from: README.md sha256:
|
|
1
|
+
<!-- synced-from: README.md sha256:b524929506f026bba7a1f4522d3273328123c696a31b72dd1c7c4bee993a8fd4 -->
|
|
2
2
|
<p align="center">🌍 <a href="README.md">English</a> | <strong>Türkçe</strong></p>
|
|
3
3
|
|
|
4
4
|
<p align="center">
|
|
@@ -88,39 +88,30 @@ yerine altyapıyla boğuşarak geçiriyor. Soup bunu çözer.
|
|
|
88
88
|
|
|
89
89
|
## Yenilikler
|
|
90
90
|
|
|
91
|
-
**v0.75.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
`
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
kaydırdığı sütun merkezleme sezgiselinin yerini alıyor. Mevcut gspo yapılandırmaları önceki
|
|
116
|
-
çalıştırmaları yeniden üretmeyecek.
|
|
117
|
-
- **Web arayüzünün okuma uç noktaları ve SSE, kimlik doğrulama gerektiriyor**; sorgu
|
|
118
|
-
dizesindeki bir belirteç yerine kısa ömürlü, tek kullanımlık biletlerle. `--public` artık
|
|
119
|
-
`/docs` ve `/openapi.json`'ı yerel ağa sunmuyor; eğitim alt süreci de çıktısını kimse
|
|
120
|
-
okumadığında artık askıda kalmıyor.
|
|
121
|
-
- **`torch>=2.6.0`**, v0.74.0'ın bilinen sınırlamasını kapatıyor: 2.5.1'de `trl>=0.29` içe
|
|
122
|
-
aktarılamıyor ve her tercih eğiticisi ölüydü. Ayrıca düzeltildi: `training.loraplus_lr_ratio`
|
|
123
|
-
onu ayarlayan her çalıştırmayı çökertiyordu ve `packing: true` TRL 0.29'da hata veriyordu.
|
|
91
|
+
**v0.75.1 — sıkılaştırma ve ürettiğini koruyan bulut çalıştırmaları.** v0.75.0'ın üzerine
|
|
92
|
+
bir bakım sürümü: yeni eğitim özelliği yok, ama yükseltirken değişen birkaç varsayılan var.
|
|
93
|
+
|
|
94
|
+
- **CLI, çıkarım sunucusu, Web arayüzü, MCP yürütmesi, yapılandırma ayrıştırması ve `.can`
|
|
95
|
+
işlemesi genelinde sıkılaştırma.** Ayrıntılar bu sürümle birlikte yayımlanan bir danışma
|
|
96
|
+
belgesinde.
|
|
97
|
+
- **`soup runs clean` artık `--no-keep-weights` seçeneğini kabul ediyor**; bu seçenek, en
|
|
98
|
+
iyi olmayan kontrol noktalarını yalnızca optimizer ve zamanlayıcı durumlarıyla değil
|
|
99
|
+
bütünüyle siliyor. `--keep-weights` varsayılan olarak kalıyor ve artık desteklenen her
|
|
100
|
+
Click sürümünde aynı anlama geliyor — Click 8.1'de eskiden kontrol noktalarının tamamını
|
|
101
|
+
yine de siliyordu.
|
|
102
|
+
- **Bulut çalıştırmaları çıktılarını koruyor.** `soup train --cloud modal`, çalıştırma
|
|
103
|
+
çıktılarını `soup-outputs` Modal birimine yazıyor ve çalıştırma bittiğinde — başarısız
|
|
104
|
+
bir çalıştırmadan sonra da — yerel çıktı dizininize indiriyor; kontrol noktaları eskiden
|
|
105
|
+
kapsayıcıyla birlikte kayboluyordu.
|
|
106
|
+
- **`soup train --cloud lambda --cloud-submit` sırasında Ctrl+C artık denetleyicinin**
|
|
107
|
+
Lambda örneğini sonlandırmasını bekliyor. Denetleyici eskiden çeyrek saniye sonra
|
|
108
|
+
öldürülüyordu, bu da ücretli bir örneğin çalışmaya devam etmesine yol açabiliyordu
|
|
109
|
+
(Linux/macOS).
|
|
110
|
+
- **Yükseltmek birkaç varsayılanı değiştiriyor.** `soup push --hub modelscope` ve
|
|
111
|
+
`--hub modelers`, `HF_TOKEN` yerine `MODELSCOPE_API_TOKEN` ve `MODELERS_TOKEN` okuyor;
|
|
112
|
+
böylece bir hub'ın belirteci hiçbir zaman başka bir hub'a sunulmuyor. Ayrıca ana
|
|
113
|
+
makinesi `api.openai.com` olmayan bir `https` yargıç URL'si, OpenAI uyumlu bir sunucu
|
|
114
|
+
olarak kabul edilip `OPENAI_API_KEY` olmadan çağrılıyor.
|
|
124
115
|
|
|
125
116
|
> Yalnızca Python **3.10–3.12**. 3.13+ sürümlerinde pip, Soup daha hiç çalışmadan yerel
|
|
126
117
|
> eklentide çöken, test edilmemiş PyTorch tekerleklerini çözümlüyordu.
|
|
@@ -524,7 +524,8 @@ soup adapters verify ./adapter --public-key trusted.pub
|
|
|
524
524
|
```
|
|
525
525
|
|
|
526
526
|
`verify` fails closed — any tamper, wrong/missing/unreadable key, or a
|
|
527
|
-
signature from an untrusted key marks the adapter invalid.
|
|
527
|
+
signature from an untrusted key marks the adapter invalid. With `--public-key`,
|
|
528
|
+
an adapter whose signature record is not `ed25519` is also invalid. Signing keys and
|
|
528
529
|
trusted public keys are symlink-rejected and size-capped but **not**
|
|
529
530
|
cwd-contained (keys are secrets that live outside the project). Signature
|
|
530
531
|
persists as `.soup-signature.json` (atomic write). `sigstore` keyless signing
|
|
@@ -221,6 +221,12 @@ soup train --config soup.yaml --cloud modal --gpu a100 --cloud-submit
|
|
|
221
221
|
`soup_modal_app.py` builds an image with `soup-cli[train]` pinned to your running version, writes
|
|
222
222
|
the embedded config inside the container, and runs `soup train` on the chosen GPU.
|
|
223
223
|
|
|
224
|
+
Run outputs are written to the `soup-outputs` Modal volume (created on first use), in a directory
|
|
225
|
+
named after the run (`soup-<12 hex>`), so checkpoints outlive the container. When the run ends,
|
|
226
|
+
including after a failed run, the app downloads every file in that directory into your local
|
|
227
|
+
output directory and prints a `modal volume get soup-outputs /<run name> <output dir> --force`
|
|
228
|
+
command that retries the download; that command places the files under `<output dir>/<run name>`.
|
|
229
|
+
|
|
224
230
|
### RunPod (Planned)
|
|
225
231
|
|
|
226
232
|
RunPod support is currently in development and descoped from live CLI dispatch pending automated
|
|
@@ -233,6 +239,10 @@ Lambda uses an instance rather than a serverless function. The generated local c
|
|
|
233
239
|
secret-free cloud-init script as API `user_data`, waits for it over SSH, copies the configured
|
|
234
240
|
output back, and requests instance termination in a `finally` block. Keep the controller running
|
|
235
241
|
until it reports that termination succeeded; shutting down the guest does not terminate billing.
|
|
242
|
+
Pressing Ctrl+C during `--cloud-submit` interrupts the controller, which still runs that `finally`
|
|
243
|
+
block, and `soup` waits for it to terminate the instance and exit rather than killing it; the only
|
|
244
|
+
way to skip that cleanup is to kill the controller process itself (for example with `kill` from
|
|
245
|
+
another terminal), which can leave the instance running.
|
|
236
246
|
|
|
237
247
|
Register the public half of an SSH key with Lambda first, then set:
|
|
238
248
|
|
|
@@ -373,7 +383,7 @@ soup runs clean run_202611...
|
|
|
373
383
|
soup runs clean --all --dry-run
|
|
374
384
|
```
|
|
375
385
|
|
|
376
|
-
By default, the `clean` command operates in "surgical mode" (`--keep-weights`), deleting huge optimizer state files (`optimizer.pt`) from lesser checkpoints to save gigabytes, but keeping their lightweight evaluation weights just in case you want to load them later.
|
|
386
|
+
By default, the `clean` command operates in "surgical mode" (`--keep-weights`), deleting huge optimizer state files (`optimizer.pt`) from lesser checkpoints to save gigabytes, but keeping their lightweight evaluation weights just in case you want to load them later. Pass `--no-keep-weights` to delete whole non-best checkpoints instead (the checkpoint with the lowest loss is always kept); combine it with `--dry-run` to see what would go first.
|
|
377
387
|
|
|
378
388
|
|
|
379
389
|
## Alternative Model Hubs
|
|
@@ -397,6 +407,9 @@ The endpoint validator follows the same SSRF rules as `HF_ENDPOINT`: only `http`
|
|
|
397
407
|
|
|
398
408
|
The hub adapter is schema-only in this release; the live downloader and uploader land in v0.51.1.
|
|
399
409
|
|
|
410
|
+
`soup push --hub modelscope` authenticates with `--token` or `MODELSCOPE_API_TOKEN`; `--hub modelers`
|
|
411
|
+
with `--token` or `MODELERS_TOKEN`. Neither reads `HF_TOKEN`.
|
|
412
|
+
|
|
400
413
|
|
|
401
414
|
## TensorBoard Integration
|
|
402
415
|
|
|
@@ -437,3 +437,4 @@ mutating tools (`train_start`, `export`) are gated behind `--allow-mutating`
|
|
|
437
437
|
- **Subprocess Isolation:** Execution runs the Soup CLI as an isolated subprocess (`shell=False`, `stdin=DEVNULL`, `cwd` pinned to server startup directory). Child stdout/stderr is redirected to `.soup/mcp-runs/<run_id>.log` to avoid corrupting the MCP JSON-RPC stdio stream.
|
|
438
438
|
- **Concurrency & Disconnects:** Enforces 1 active execution at a time, gated on a persisted run whose process is still alive — so a **restarted** server does not launch a second training while a child from a previous server is still running, and a stale record whose process is gone never blocks execution. A `launching` record (committed before the child process exists, pid not yet written) blocks restart capacity too: it is indistinguishable from "about to spawn", so treating it as live is the safe direction after a crash in that window. If a server crash leaves that row behind, `soup mcp runs reconcile --expunge-launching` removes rows older than five minutes and prints every removed `run_id`; use `--older-than-seconds N` to choose another positive threshold. The command refuses the whole operation if any candidate records a PID that is still alive. Launches run in background (fire-and-forget). Disconnecting the MCP client does not terminate an already-running subprocess.
|
|
439
439
|
- **Config Snapshotting & Input Revalidation:** At plan time (`train_start`), the validated config is snapshotted to `.soup/mcp-runs/<run_id>/config.yaml`, and execution uses this snapshot rather than the original mutable config path. External protected inputs (such as datasets and model/checkpoint directories or files) are not frozen in the snapshot; instead, their content digests (computed via SHA-256 for regular files, or deterministic recursive content hashing over sorted relative file paths for directory trees, bounded by file-count and total-byte safety limits) are recorded at plan time and revalidated immediately before spawn. Modifying an external protected input between plan and execute invalidates the token. Modifying the original config path after planning has no effect because execution strictly uses the snapshotted config. Snapshotting freezes only the configuration itself, not external filesystem assets.
|
|
440
|
+
- **Every Local Input Is Pinned:** A train plan pins every local file or directory the run reads (model, datasets, reward/teacher/PRM models, reward `.py` files, unlearning sets); an input outside the working directory is refused at plan time, and an input that did not exist at plan time must still not exist at execution.
|
|
@@ -218,6 +218,8 @@ tasks:
|
|
|
218
218
|
judge_model: ollama://llama3.1 # SSRF-allowlisted scheme
|
|
219
219
|
```
|
|
220
220
|
|
|
221
|
+
`judge_model` accepts `ollama://<model>`, `http://localhost:<port>/<model>` or `https://<host>/<model>`. An `https://` judge URL uses `OPENAI_API_KEY` only when its host is `api.openai.com`; other hosts are called as an OpenAI-compatible server without that key.
|
|
222
|
+
|
|
221
223
|
Baselines may be a registry reference (`registry://<name-or-id>`), a file path, or omitted for the first run. Any structured exception (`ValueError`, `FileNotFoundError`, `OSError`) during the gate is treated as a regression under `on_regression: stop`.
|
|
222
224
|
|
|
223
225
|
|
|
@@ -516,6 +516,15 @@ output: ./output
|
|
|
516
516
|
>
|
|
517
517
|
> If that prints anything, the adapter is affected. From v0.72.1 a streamed adapter is byte-for-byte in the same layout as an ordinary LoRA run.
|
|
518
518
|
|
|
519
|
+
> **peft 0.21.0 (released 2026-09-15) saved a streamed adapter EMPTY on every Soup before the #1005 fix — re-run those trainings.** peft 0.21 selects the adapter tensors to save by the prefixes it reads off `model.named_modules()`; the streaming wrapper's module names carried an `.inner.` segment its saved keys did not, so `trainer.save_model()`, every `save_steps` checkpoint and `PeftModel.save_pretrained()` wrote a 40-byte `adapter_model.safetensors` holding **zero** tensors, training reported success, and `--resume` loaded nothing. The training itself was correct — only the file is empty, and nothing in it can be recovered. Check with:
|
|
520
|
+
>
|
|
521
|
+
> ```bash
|
|
522
|
+
> python -c "from safetensors.torch import load_file; \
|
|
523
|
+
> print(len(load_file('adapter_model.safetensors')))"
|
|
524
|
+
> ```
|
|
525
|
+
>
|
|
526
|
+
> `0` means the adapter is lost. Fixed on `main` by PR #1010 (the wrapper now reports canonical names, so peft 0.20 and 0.21 both save every tensor; no `peft<0.21` pin); the next release carries it. Until you run a Soup with that fix, `pip install "peft<0.21"` is the workaround.
|
|
527
|
+
|
|
519
528
|
**Troubleshooting:**
|
|
520
529
|
- **"trainable LoRA parameters remain on the meta device"** — PEFT attached an
|
|
521
530
|
adapter without real storage and Soup refused the run before installing the
|
|
@@ -425,7 +425,7 @@ curl http://localhost:8000/v1/adapters
|
|
|
425
425
|
# → {"adapters": [{"name": "chat", "active": true}, ...], "active": "chat"}
|
|
426
426
|
```
|
|
427
427
|
|
|
428
|
-
Names are validated against `^[a-zA-Z0-9][a-zA-Z0-9-]*$`; activate/deactivate calls are thread-safe behind a lock.
|
|
428
|
+
Names are validated against `^[a-zA-Z0-9][a-zA-Z0-9-]*$`; activate/deactivate calls are thread-safe behind a lock. Activate/deactivate also check the `Host` and `Origin` headers (see [Server-Side Tool Endpoints](#server-side-tool-endpoints)).
|
|
429
429
|
|
|
430
430
|
### Multi-Tenant Vector Bank (`soup serve --bank`)
|
|
431
431
|
|
|
@@ -559,6 +559,8 @@ soup ui
|
|
|
559
559
|
|
|
560
560
|
**Security:** The Web UI generates a random auth token at startup (printed to console). Every private endpoint — mutating (start/stop training, delete runs, inspect data, validate config) and reading (runs, metrics, system, recipes, SSE streams) — requires an `Authorization: Bearer <token>` header. `/` and `/api/health` stay open so the dashboard can load. CORS is restricted to the served origin. Data inspection is sandboxed to the working directory.
|
|
561
561
|
|
|
562
|
+
**Content policy.** Every Web UI response carries a `Content-Security-Policy` that allows scripts only from the UI's own origin and the pinned Chart.js file (no inline script, no `eval`), plus `X-Content-Type-Options: nosniff`, `Referrer-Policy: no-referrer` and `X-Frame-Options: DENY`. Chart.js is loaded with a Subresource Integrity hash, so the browser refuses it if the CDN serves different bytes. The UI's markup carries no inline event handlers, and every server- or dataset-derived value is escaped before it is rendered. The loopback-only `/docs`, `/docs/oauth2-redirect` and `/redoc` pages are the one exception to the policy header, because FastAPI's interactive docs start from an inline script.
|
|
563
|
+
|
|
562
564
|
**Interactive API docs are loopback-only.** `/openapi.json`, `/docs`, `/docs/oauth2-redirect` and `/redoc` serve on a loopback bind and are **absent** (404) on any other, including `soup ui --public`. This is deliberate rather than incidental: the schema exposes no run data, configuration or logs, but it does describe every route, parameter and request/response shape, and on a LAN bind that is free reconnaissance. Gating them behind the token instead was rejected — `/docs` is a browser navigation and Swagger cannot attach a Bearer header to it, so gating would break the page for a developer while leaving `/openapi.json` readable by any HTTP client. If you need the schema while bound publicly, read it from a loopback instance of the same version.
|
|
563
565
|
|
|
564
566
|
```bash
|
|
@@ -767,3 +769,14 @@ Three POST routes are now available on `soup serve`:
|
|
|
767
769
|
HTTP 501 when strict OS isolation is unavailable (including on Windows or restricted
|
|
768
770
|
Linux containers).
|
|
769
771
|
|
|
772
|
+
Tool routes, `/v1/thumbs` and adapter activate/deactivate accept requests only when the
|
|
773
|
+
`Host` header names the bound address (any loopback name for a loopback bind) and any
|
|
774
|
+
`Origin` header names the same; otherwise they answer 421 or 403.
|
|
775
|
+
|
|
776
|
+
The generation routes (`/v1/chat/completions`, `/v1/messages`) and the adapter listing
|
|
777
|
+
(`GET /v1/adapters`) carry the narrower half of that check: a request whose `Origin` names
|
|
778
|
+
another site is refused with 403, so a page the operator merely visits cannot drive
|
|
779
|
+
generation on their server or enumerate the loaded adapters — CORS alone would only stop
|
|
780
|
+
that page *reading* the reply, not sending the request. Requests that carry no `Origin` at
|
|
781
|
+
all — curl, the OpenAI/Anthropic SDKs, a reverse proxy — are unaffected, and `Host` is not
|
|
782
|
+
checked on these routes, so a proxy can still front them under its own hostname.
|
|
@@ -646,6 +646,8 @@ The judge is Soup's own OpenAI-compatible `JudgeEvaluator` adapted to TRL's
|
|
|
646
646
|
`BasePairwiseJudge` (swap-debiased: a winner is only recorded when both A,B and
|
|
647
647
|
B,A orders agree). Recipe: `online-dpo-smollm2-135m`. Proof-of-mechanism was
|
|
648
648
|
validated on SmolLM2-135M with a synthetic judge (not a production RLHF claim; #286).
|
|
649
|
+
An `https://` judge URL uses `OPENAI_API_KEY` only when its host is `api.openai.com`; other
|
|
650
|
+
hosts are called as an OpenAI-compatible server without that key.
|
|
649
651
|
|
|
650
652
|
|
|
651
653
|
## Weighted Multi-Objective Preference Loss
|
|
@@ -18,7 +18,7 @@ from pathlib import Path
|
|
|
18
18
|
from typing import Callable, Optional
|
|
19
19
|
|
|
20
20
|
from soup_cli.cans.schema import DeployTarget, Manifest
|
|
21
|
-
from soup_cli.cans.unpack import extract_can, inspect_can
|
|
21
|
+
from soup_cli.cans.unpack import extract_can, inspect_can, read_config
|
|
22
22
|
from soup_cli.utils.paths import is_under_cwd
|
|
23
23
|
|
|
24
24
|
_RUN_TIMEOUT_SECONDS = 60 * 60 * 24 # 24h max — generous; user kills with ^C
|
|
@@ -130,10 +130,27 @@ def _deploy_target(target: DeployTarget, extract_dir: Path) -> int:
|
|
|
130
130
|
"--name", target.name,
|
|
131
131
|
])
|
|
132
132
|
if target.kind == "gguf":
|
|
133
|
-
# Already extracted — just confirm presence
|
|
133
|
+
# Already extracted — just confirm presence, but verify the manifest's
|
|
134
|
+
# path really resolves inside extract_dir first. ``target.path`` comes
|
|
135
|
+
# from the can, so an absolute path (pathlib drops the left operand
|
|
136
|
+
# when the right one is absolute), a ``..`` segment, or a symlink
|
|
137
|
+
# planted in the can would otherwise reach an arbitrary file on disk.
|
|
138
|
+
# Same containment pattern as the kind=ollama branch above; the
|
|
139
|
+
# DeployTarget field validator is the first line, this is the second.
|
|
134
140
|
if not target.path:
|
|
135
141
|
raise ValueError("deploy_target kind=gguf requires 'path'")
|
|
136
|
-
|
|
142
|
+
extract_real = os.path.realpath(str(extract_dir))
|
|
143
|
+
gguf_real = os.path.realpath(str(extract_dir / target.path))
|
|
144
|
+
try:
|
|
145
|
+
common = os.path.commonpath([extract_real, gguf_real])
|
|
146
|
+
except ValueError: # different drives on Windows — never contained
|
|
147
|
+
common = ""
|
|
148
|
+
if common != extract_real or gguf_real == extract_real:
|
|
149
|
+
raise ValueError(
|
|
150
|
+
f"deploy gguf path '{target.path}' escapes the can extract "
|
|
151
|
+
f"dir - refusing"
|
|
152
|
+
)
|
|
153
|
+
gguf_path = Path(gguf_real)
|
|
137
154
|
if not gguf_path.exists():
|
|
138
155
|
raise FileNotFoundError(f"deploy gguf path not found: {gguf_path}")
|
|
139
156
|
return 0
|
|
@@ -180,6 +197,10 @@ def run_can(
|
|
|
180
197
|
|
|
181
198
|
# Read manifest first — surface schema errors before any side effects.
|
|
182
199
|
manifest = inspect_can(str(src))
|
|
200
|
+
# The extracted config.yaml is handed to ``soup train``, whose loader has
|
|
201
|
+
# no size or expansion limit of its own; read it through the capped reader
|
|
202
|
+
# first so an oversized or alias-amplified config is refused here.
|
|
203
|
+
read_config(str(src))
|
|
183
204
|
|
|
184
205
|
if not yes:
|
|
185
206
|
if confirm_callback is None:
|
|
@@ -8,6 +8,8 @@ from typing import Literal, Optional
|
|
|
8
8
|
|
|
9
9
|
from pydantic import BaseModel, Field, field_validator
|
|
10
10
|
|
|
11
|
+
from soup_cli.utils.yaml_limits import check_expanded_nodes
|
|
12
|
+
|
|
11
13
|
CAN_FORMAT_VERSION = 3 # v0.71.3 #182: attestations field (additive over v2)
|
|
12
14
|
SUPPORTED_CAN_FORMAT_VERSIONS = (1, 2, 3)
|
|
13
15
|
|
|
@@ -28,6 +30,11 @@ def validate_attestation_statement(stmt: object) -> dict:
|
|
|
28
30
|
"""
|
|
29
31
|
if not isinstance(stmt, dict):
|
|
30
32
|
raise ValueError("attestation must be a dict (in-toto Statement)")
|
|
33
|
+
# Before json.dumps: a statement loaded from YAML may share references
|
|
34
|
+
# (anchors / aliases) whose serialised form is exponentially larger. Every
|
|
35
|
+
# node costs at least one byte of JSON, so a statement within the byte cap
|
|
36
|
+
# below has fewer nodes than _MAX_ATTESTATION_BYTES and always passes.
|
|
37
|
+
check_expanded_nodes(stmt, "attestation", limit=_MAX_ATTESTATION_BYTES)
|
|
31
38
|
type_field = stmt.get("_type")
|
|
32
39
|
predicate_type = stmt.get("predicateType")
|
|
33
40
|
if not isinstance(type_field, str) or not type_field:
|