What's New
v0.53.6 — Plugin + Agent + Anthropic API: 6 features — 3 live, 3 deferred-live stubs with v0.53.7 markers.
- Soup plugins now run live as Trainer callbacks (#101). New
SoupPluginCallbackdispatchespre_train/post_train/pre_step/post_stepto every enabled plugin via the v0.45.0 registry. Hook exceptions swallowed at WARNING — one misbehaving plugin must never crash a multi-hour run. Wired into all 13 transformer-backend trainers (SFT + DPO + GRPO + KTO + ORPO + SimPO + IPO + BCO + PPO + RewardModel + Pretrain + Embedding + Distill) viaattach_plugin_callback. - Anthropic-shaped
/v1/messagesendpoint (#102).soup serve --backend transformersexposes aPOST /v1/messagesroute reusing the v0.45.0anthropic_messagesconverter + the existing chat handler. Validation errors return a generic"Invalid request"400 (details logged server-side at DEBUG). Streaming returns 501 — true Anthropic event-shape SSE ships in v0.53.7. - n-gram speculative decoding wired through (#104). When the server is started with an
NgramSpecConfig, every chat completion forwardsprompt_lookup_num_tokens=Nintomodel.generate(...)(HF Transformers ≥ 4.38 prompt-lookup decoding). Mutually exclusive with a real draftassistant_model. soup data recipe --executelands as a stub-then-live CLI surface (#106).--execute --output <dir>validates the DAG, enforces cwd-containment on--outputat the CLI boundary, then surfaces thev0.53.7NotImplementedErrormarker fromrun_recipe. Empty-string--output ""and outside-cwd paths are rejected before the runner is even called.- Server-side tool endpoints (
/v1/tools/python+/v1/tools/bash+/v1/tools/web_search) (#103). URL schema lives now so clients can target the endpoints. All three return HTTP 501 with the v0.53.7 marker. instantiate_trainer_pluginsschema-only (#105). Validates[grokfast, spectrum, llmcompressor, sonicmoe, cce_plugin, math_verify]lists then raises with the v0.53.7 marker.
Tests: 7998 → 8051 (+53 in tests/test_v0536.py). All green across ubuntu/macos/windows × py 3.9/3.11/3.12. Ruff clean. Three review agents ran (python / code / security); every HIGH and MEDIUM finding fixed.
Install / Upgrade
pip install --upgrade soup-cliSecurity
- Generic validation-error redaction on
/v1/messages— internal validator/converter detail no longer leaks to the HTTP 400 body; details logged server-side at DEBUG (matchesutils/errors.pypolicy). - Race-free plugin hook snapshot —
build_plugin_callbackcollects enabled-plugin hooks ONCE and passes the list to the callback constructor; a plugin registered between the "is empty?" check and the ctor cannot silently slip into the active hook list. - CLI-side cwd containment on
soup data recipe --execute --output <dir>—is_under_cwdcheck fires BEFORE the live runner is called, so even after the v0.53.7 live wiring lands, an outside-cwd--outputwill already be rejected at the CLI boundary (defence-in-depth). - HTTP 501 stubs for
/v1/tools/*— schema lock-in only; no sandbox execution path is reachable until v0.53.7.
Known Limitations
- vLLM
/v1/messagesparity deferred to v0.53.7 — Anthropic route is live on the transformers backend only. - Streaming
/v1/messagesreturns 501 — Anthropic event-shape SSE ships in v0.53.7. - Plugin hook snapshot is at callback-construction time — a plugin registered mid-run will NOT retroactively receive hooks for the active run (by design).
- n-gram speculative decoding is transformers-only — vLLM ships its own prompt-lookup path that needs a different kwarg.
/v1/tools/{python,bash,web_search}return 501 — RLVR sandbox HTTP wrapper +WebSearchConfig.domain_allowlistenforcement land in v0.53.7.run_recipeis stub-only — live per-node handlers + checkpoint/resume + judge-provider routing deferred to v0.53.7.instantiate_trainer_pluginsis stub-only — validates the name list then raises; live upstream-plugin lazy imports + callback construction in v0.53.7.
🤖 Generated with Claude Code