github MakazhanAlpamys/Soup v0.71.1
v0.71.1 — Quick wins + wiring

latest releases: v0.77.1, v0.77.0, v0.76.1...
5 months ago

Quick wins + wiring — seven small-but-sharp closures plus a consolidated review-fix pass (0 CRITICAL / 0 HIGH).

What's New

  • soup env fix — render a reproducible install plan straight from soup-env.lock. Emits copy/paste uv pip install commands (--format uv-pip, default) or a requirements.txt body (--format requirements); --output optionally writes a cwd-contained requirements.txt. Non-pip conda/system/wheel entries are surfaced as # <source>: <name>==<version> comments. Print-only by design — it never shells out to a package manager. (#209)
  • soup lock write --env-lock — auto-derive --env-hash from soup-env.lock (via the new compute_env_hash, which excludes created_at so a re-snapshot of the same env is hash-stable). No more hand-copying a 64-hex string after soup env lock; an explicit --env-hash still wins. (#224)
  • soup serve --record-thumbs <db> — capture 👍/👎 feedback into a local-RL SQLite at startup, plus a new POST /v1/thumbs endpoint (transformers backend). The start of an on-box feedback flywheel. (#230)
  • Judge-calibration persistence — JudgeCalibrationReport.to_dict, write_judge_calibration, and load_judge_calibration, backed by a new judge_calibration registry artifact kind. Loading re-validates the report, so a corrupt on-disk field is rejected. (#214)
  • Bundled MUSE + WMDP unlearning eval fixtures — soup eval unlearning --benchmark muse|wmdp now runs out of the box. WMDP forget-set probes ship redacted (placeholder prompts + REFUSED responses) — Soup never bundles verbatim hazardous-knowledge content. (#195)
  • soup completions now introspects a cached base model's actual LoRA target modules (config-only AutoConfig, local_files_only, never networks or raises), falling back to the canonical default shape when the base isn't cached. (#210)
  • build_dag.validate_build_source — cwd-containment + symlink rejection for build-manifest source paths. (#233)

Install / Upgrade

pip install -U soup-cli            # light: CLI + config + data tools (no PyTorch)
pip install -U 'soup-cli[train]'   # add the training stack (torch, transformers, peft, trl, …)

Security

  • WMDP forget-set fixtures ship redacted — no verbatim hazardous-knowledge content in the repo.
  • load_judge_calibration routes through enforce_under_cwd_and_no_symlink before reading (cwd-containment + symlink rejection, matching every other read path).
  • POST /v1/thumbs uses reject-then-act ordering (auth → 404-state → dict-type → field-types → record); --record-thumbs paths are validated via validate_db_path (cwd-containment + symlink) at startup.
  • The soup serve --record-thumbs startup print Rich-escapes the operator-supplied path.

Known Limitations

  • soup env fix is print-only — it renders an install plan for copy/paste or scripting, not a venv-recreating --fix. Recreating a venv is environment-dependent (venv path, interpreter location, index config), so the operator (or CI) runs the rendered commands. The name==version pins assume the PEP 440 versions importlib.metadata reported at lock time.
  • soup serve --record-thumbs is wired on the transformers backend only.
  • soup completions arch introspection requires the base model to be cached locally (config-only, never networks); it falls back to the canonical default LoRA shape otherwise.
  • MUSE / WMDP fixtures are mini-fixtures — out-of-the-box demos, not the full upstream benchmark corpora.

Full history: CHANGELOG.md.

Don't miss a new Soup release

NewReleases is sending notifications on new releases.