v0.71.5 — Ingest / data / prompt / drift
Production-loop ergonomics: alternative model hubs for data commands, tokenizer-aware prompt pruning, webhooks across the trace toolchain, percentile curriculum bucketing, and smarter pre-flight advise.
What's New
- Alternative model hubs for data —
soup data push --hub modelscope|modelersuploads a local JSONL to ModelScope / Modelers, andsoup data forge --hub … --teacher owner/namepre-fetches the teacher from that hub (warns loudly if--teacherisn't a routable repo id instead of silently dropping--hub). (#157) - Tokenizer-aware prompt pruning —
soup prune-prompt --tokenizer <id-or-path>finds the shared token prefix and decodes only the remainder, so BPE multi-byte sequences never get truncated mid-token the way char-slicing can. (#205) - Webhooks across the trace toolchain —
--slack-url/--discord-urlnow work onsoup ingest,soup prune-prompt,soup ab, andsoup data active-sample, sharing the same SSRF-hardened validator assoup drift-alarm. The A/B harness only pings when the sequential test actually decides (reject_h0/accept_h0), not while it's still collecting. (#207) - Curriculum by difficulty percentile — dynamic curriculum can bucket by
loss/perplexitypercentile (rolling 512-step window) instead of length round-robin;lengthkeeps the round-robin default. (#149) - Benchmark-score curves in replay —
ExperimentTracker.get_metric_seriestransparently falls back to theeval_resultstable when a metric has no per-step rows, sosoup runs replaycan plot anmmlu/gsm8kcurve the same way it plotsloss. (#164) - Smarter pre-flight
advise—soup advisenudges its confidence (never its decision) using your prior recorded verdicts for the same project + choice once ≥3 precedents exist. (#163)
Install / Upgrade
pip install --upgrade soup-cli # 0.71.5Security
- New shared
soup_cli/utils/webhooks.pycentralises the v0.63.0 drift-alarm SSRF policy and applies it to four more commands with full parity: scheme allowlist (http/https), loopback-only HTTP, RFC1918 / link-local / reserved / multicast IPs rejected viaipaddress,0.0.0.0rejected, null-byte + control-char rejection, 4096-char URL cap.post_webhooknever raises, so a flaky webhook can't fail the command. soup data push --hubstages the upload under a cwd-contained temp dir so the existingupload_repocontainment check holds.
Known Limitations
- #204 (live SaaS trace pull) deferred — the live Langfuse / LangSmith / Helicone / OpenPipe / OTel pull adapters need paid vendor accounts to validate honestly and can't be exercised offline, so they stay open with an
infra-blockedlabel.soup ingestcontinues to parse JSONL exports you pull from your dashboard / vendor API; only the in-CLI network pull is deferred.
Full history: CHANGELOG.md