From e248b5aea8e8a4fa43fe67a8e6a2e485d5f70716 Mon Sep 17 00:00:00 2001 From: Alpamys Date: Mon, 27 Apr 2026 20:11:22 +0500 Subject: [PATCH] fix(v0.33.0): missed checklist items (CONTRIBUTING + Unicode arrow) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pre-push audit found 3 gaps in the Release Checklist (steps 6, 11): 1. soup_cli/commands/can.py:118 used → (->) in the run_cmd docstring. Windows cp1252 in non-PYTHONUTF8 mode raises UnicodeEncodeError when Typer renders --help. Replaced with ASCII '->'. Verified: `python -m soup_cli.cli can run --help` renders cleanly on Windows. 2. CONTRIBUTING.md test counts not updated: - tree comment: 97 files, 3696 tests -> 104 files, 3818 tests - test table: +7 rows for test_part_{f,a_wave1,a_wave2,e,d,c,b} - directory tree: added registry/attach.py, cans/run.py, cans/publish.py, data/collators.py, utils/v028_features.py 3. README.md:967 stale "v0.32.0 stub" note. Updated to reflect that --find-lr now runs the live loop in v0.33.0 and that spike-recovery writes a JSON hint while live optimizer rewind / DataLoader rebuild remain follow-ups. examples/README.md: skipped per checklist step 12 — v0.33.0 added no new YAML configs (the new commands operate on .can files which use existing config schemas). Co-Authored-By: Claude Opus 4.7 (1M context) --- CONTRIBUTING.md | 16 ++++++++++++---- README.md | 2 +- soup_cli/commands/can.py | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f11e26b..640ad26 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -103,13 +103,14 @@ soup_cli/ migrate/ - Config migration (LLaMA-Factory, Axolotl, Unsloth) recipes/ - Ready-made configs for popular models (80 recipes) autopilot/ - Zero-config decision engine (v0.25.0) - registry/ - Model Registry (hashing, store, diff) (v0.26.0) - cans/ - Shareable .can artifact format (v0.26.0) + registry/ - Model Registry (hashing, store, diff, attach) (v0.26.0 + v0.33.0) + cans/ - Shareable .can artifact format + run/publish orchestrator (v0.26.0 + v0.33.0) data/traces/ - Trace-to-Preference harvester (v0.26.0) - utils/ - GPU, errors, MoE, GaLore, QAT, Unsloth, vLLM, SGLang, Liger, FlashAttn, FSDP, Ring Attention, long-context, quality, curriculum, freeze, dataset-registry, mlx, peft_builder, paths, topology, launcher, mii, pipeline, cut_ce, fp8, gradient_ckpt, kernel_picker, cross_doc_attn, activation_offload, hf, spec_pairing, structured_output, metrics, tracing, auto_quant, lr_finder, grad_accum, mixed_precision, warmup, spike_recovery, convergence + data/collators.py - CrossDocCollator for sample packing (v0.33.0) + utils/ - GPU, errors, MoE, GaLore, QAT, Unsloth, vLLM, SGLang, Liger, FlashAttn, FSDP, Ring Attention, long-context, quality, curriculum, freeze, dataset-registry, mlx, peft_builder, paths, topology, launcher, mii, pipeline, cut_ce, fp8, gradient_ckpt, kernel_picker, cross_doc_attn, activation_offload, hf, spec_pairing, structured_output, metrics, tracing, auto_quant, lr_finder, grad_accum, mixed_precision, warmup, spike_recovery, convergence, v028_features ui/ - Web UI (FastAPI + HTML/JS SPA) -tests/ - Test suite (97 files, 3696 tests) +tests/ - Test suite (104 files, 3818 tests) examples/ - Real-world config examples and datasets ``` @@ -234,6 +235,13 @@ pytest tests/ --cov=soup_cli --cov-report=html | test_inference_advanced.py | Inference Excellence: prefix caching, spec-decoding auto-pairing, LoRA hot-swap, structured output, dashboard + /metrics, OpenTelemetry tracing, auto-quant picker (v0.30.0) | | test_recipes_v031.py | Model & Recipe Breadth: 34 new recipes (vision/audio/reasoning/edge/domain/multimodal); catalog-wide invariants; CI workflow validation (v0.31.0) | | test_auto_tuning.py | Training Stability & Auto-Tuning: LR range finder, grad-accum monitor, auto mixed-precision, auto warmup, spike recovery, convergence detector, autopilot wiring (v0.32.0) | +| test_part_f_hardening.py | Live Wire Part F: RLVR OS-level sandbox isolation + prune_checkpoints TOCTOU (v0.33.0) | +| test_part_a_wave1.py | Live Wire Part A: live eval-gate scoring + registry attach (v0.33.0) | +| test_part_a_wave2.py | Live Wire Part A: soup can run / publish + DeployTarget schema (v0.33.0) | +| test_part_e.py | Live Wire Part E: --find-lr live loop + spike recovery hint + auto mixed-precision push + grad-accum advisory (v0.33.0) | +| test_part_d.py | Live Wire Part D: structured-output LogitsProcessor + auto-quant live picker + HF push integration smoke (v0.33.0) | +| test_part_c.py | Live Wire Part C: multi-trainer v0.28.0 features + selective ckpt hooks + CrossDocCollator (v0.33.0) | +| test_part_b.py | Live Wire Part B: auto-reexec under accelerate launch + DeepSpeed-MII live serve (v0.33.0) | ## Making Changes diff --git a/README.md b/README.md index 040a3cc..47a75ab 100644 --- a/README.md +++ b/README.md @@ -964,7 +964,7 @@ training: Records peak memory each step. When pressure crosses the threshold, recommends a new `(batch, accum)` pair preserving effective batch (capped at `accum=1024`). -> **v0.32.0 note:** the LR sweep currently writes a stub report demonstrating the schedule + analyzer + JSON path. The live in-process LR-sweep training loop, the live spike-recovery rollback, and live grad-accum mutation all land in v0.32.1. The schemas, validators, and APIs are stable in v0.32.0. +> **v0.33.0:** `--find-lr` now runs an in-process LR-sweep training loop (replaces the v0.32.0 stub curve), spike-recovery writes a `spike_recovery.json` hint with the decayed LR for re-launch, and the grad-accum advisory prints a recommended `(batch, accum)` pair when VRAM pressure crosses the threshold. Live optimizer-state rewind and live DataLoader rebuild remain follow-ups (HF Trainer / TRL upstream constraints). ## Training Intelligence (Forgetting + Checkpoint Quality) diff --git a/soup_cli/commands/can.py b/soup_cli/commands/can.py index 2722d10..7aeaa2b 100644 --- a/soup_cli/commands/can.py +++ b/soup_cli/commands/can.py @@ -115,7 +115,7 @@ def run_cmd( help="Write env summary (pip freeze + GPU info) to this path", ), ) -> None: - """Run a can end-to-end: extract → train (→ optional deploy).""" + """Run a can end-to-end: extract -> train (-> optional deploy).""" from soup_cli.cans.run import run_can if not yes: