What's New
26 new ready-made recipes (catalog 80 → 106) — match Unsloth's day-zero coverage:
- Reasoning + agent: GPT-OSS 20B/120B, GLM 4.6 / 5, Kimi K2 / K2-Thinking GRPO, MiniMax-M2, QwQ-32B GRPO, QVQ-72B
- Small / specialist: Granite 4, Liquid LFM2, Cogito v2, Mistral Small 3 / Medium 3.5, Magistral / Devstral / Ministral, MedGemma, EmbeddingGemma
- Vision / multimodal: LLaVA-Next, InternVL 3.5, Voxtral (audio), Baichuan 2, Qwen-Image, DeepSeek-OCR, Paddle-OCR-VL
Browse with soup recipes list / soup recipes search <keyword>.
Alternative model hubs. New training.hub: hf | modelscope | modelers with full SSRF-hardened endpoint validators (parity with the v0.29.0 HF_ENDPOINT policy — scheme allowlist, loopback-only HTTP, RFC1918 / link-local / cloud-metadata IP rejection, control-character / CRLF rejection). MODELSCOPE_ENDPOINT / MODELERS_ENDPOINT env vars override the default hub URL. backend: mlx + hub: modelscope is rejected at config-load with a distinct error message.
20 new architectures in the multipack allowlist — MULTIPACK_ARCHITECTURES grows 18 → 38 to enable FFD bin-packing on Granite, GLM, Kimi, MiniMax, QwQ, QVQ, GPT-OSS, Magistral, Devstral, Ministral, MedGemma, LFM2, Cogito, Hunyuan, Ernie, Yi, Baichuan, ChatGLM.
+455 net new tests (6729 → 7184). 4 sequential review agents (python-review, security-review, code-review, tdd-guide) fed back HIGH / MEDIUM / LOW findings; every finding fixed before commit (case-insensitive _normalize_hub field-validator, MLX cross-validator, control-char rejection in endpoint validator, is_hf bool guard, exact-count multipack arch invariant, empty-component model-id check).
Install / Upgrade
pip install --upgrade soup-cliSecurity
See SECURITY.md for the full hardening log.
This release adds:
soup_cli/utils/hubs.py: closed-allowlistSUPPORTED_HUBS+ SSRF-hardenedvalidate_hub_endpointwith full v0.29.0HF_ENDPOINTparity (scheme allowlist, loopback-only HTTP, RFC1918 / link-local / cloud-metadata viaipaddress.ip_address, control-character / CRLF rejection as defence-in-depth review fix, IPv6-mapped-private rejection).TrainingConfig.hubLiteral field withfield_validator(mode="before")_normalize_hubfor case-insensitive normalisation (matches v0.41.0optimizer/ v0.50.0grpo_variantpolicy).- SoupConfig
_validate_hub_supportedcross-validator rejectinghub != 'hf'onbackend == 'mlx'(mlx-lm only downloads from HF Hub). - All hub helpers reject
boolbeforeisinstance(int/str)(matches the project's bool-as-int defence policy).
Known Limitations
- Live downloader / uploader / push integration deferred to v0.51.1. The
TrainingConfig.hubschema lock-in ships now (Literal accept + MLX cross-validator + case-normalisation), butsoup data download --hub modelscopeandsoup push --hub modelersstill route through the existing HF Hub code path; the actualmodelscope-sdk/openmind-hubadapters are the v0.51.1 deliverable. Same stub-then-live pattern as v0.27.0 MII / v0.37.0 multipack / v0.50.0 GRPO Plus. - Speculative / aspirational
basemodel IDs in some recipes. The catalog ships entries foropenai/gpt-oss-{20,120}b,THUDM/glm-5,Qwen/Qwen-Image,deepseek-ai/DeepSeek-OCR,PaddlePaddle/PaddleOCR-VL,google/embeddinggemma-300mso users have ready-made recipes the moment those repos go live (matches the plan's "match Unsloth's day-zero coverage" directive). Recipes for not-yet-published repos will surface a clear HF Hub 404 when the user runssoup train --recipe <name>. - MULTIPACK arch allowlist is name-based. Adding
KimiForCausalLM/MiniMaxForCausalLM/ etc. enables FFD bin-packing for those archs but does NOT verify the upstream HF model class actually exposes the_get_unpad_datamonkey-patch surface multipack expects; first-time users on a new arch should validate output equivalence betweenmultipack: trueandmultipack: falseon a small dataset before scaling up. - DNS-resolved private hostnames not blocked.
validate_hub_endpointonly rejects literal RFC1918 / link-local IP addresses; a hostname likecorp-proxy.internalthat DNS-resolves to a private IP is accepted at validation time (mirrors the v0.29.0HF_ENDPOINTpolicy — DNS resolution is intentionally not performed in this local-tool threat model). hub: modelscopedoes NOT yet rewritebase:repo IDs. A user-suppliedbase: meta-llama/Llama-3.1-8Bwithhub: modelscopewill still try the literalmeta-llama/Llama-3.1-8Bagainst the modelscope endpoint when the v0.51.1 downloader lands; an automatichf-id → modelscope-idtranslation table is out of scope for this release.
🤖 Generated with Claude Code