What's New
11 items: 6 v0.42/v0.47 deferrals + 5 v0.53.6 stub-to-live carry-overs.
Data Forge & Pipeline (live)
- #111
soup data forge --judge-provider {ollama,anthropic,vllm}— lazy v0.20.0 providers; localhost-only SSRF, env-only API keys, scheme allowlist - #112
soup data decontaminate --benchmark-file <path>— operator-supplied JSONL corpus; cwd-contained, symlink-rejected; extends bundled--benchmarks - #87
prompt_strategy: module:fnruntime — importlib resolver,lru_cache-backed, per-row hook in SFT formatter - #86
soup data preprocessAOT tokenize — Arrow shards + cache_key metadata; SFT + Pretrain wrappers short-circuit onformat='pre_tokenized'+ matching cache hash - #88
soup data ingestmarkdown heading split — one JSONL row per# headingsection withlevelfield; preamble row carriesnullsection
Inference Server (live)
- #102
POST /v1/messagesAnthropic-compatible endpoint on both transformers and vLLM backends; loopback-only CORS - #102 Streaming SSE
/v1/messages— Anthropic event-shape (message_start→content_block_delta→message_delta+message_stop);Cache-Control: no-store+ header-injection defence onmodel+msg_id - #103
POST /v1/tools/python— RLVR sandbox wrapper, 5s timeout, 64KB code cap, Bearer auth gate - #103
POST /v1/tools/web_search—WebSearchConfig.domain_allowlistdeny-by-default, 5-result cap, snippet null-byte strip, Bearer auth
Runtime (live)
- #106
run_recipelive for 6 NODE_KINDS (seed / llm_text / code / judge / validator / sampler); atomic checkpoint viatempfile.mkstemp + os.replace; resume rehydrates from per-node.node-<name>.jsonlsidecars;failed_reasonpath-redacted - #105
instantiate_trainer_pluginslive forcce_plugin/grokfast/spectrum/llmcompressor/sonicmoe/math_verify— lazy imports + friendly pip-install advisory on missing dep
Install/Upgrade
pip install -U soup-cliOr via Docker:
docker pull ghcr.io/makazhanalpamys/soup:v0.53.7Security
1 CRITICAL + 11 HIGH + 17 MEDIUM + 10 LOW review findings addressed.
Highlights:
POST /v1/tools/bashreverted to HTTP 501 — security review caught that/bin/sh -cspawns a child outside the RLVR sandbox's OS-level isolation (unshare(CLONE_NEWNET)/ macOSsandbox-exec/ socket-patch). Deferred to v0.53.8 pending container/namespace work._node_seedsymlink check nowos.lstaton RAW path BEFORErealpath(v0.33.0 #22 TOCTOU parity)_save_checkpoint+ sampler use atomictempfile.mkstemp + os.replacefailed_reasonpath-redacted viaos.path.basename+ 256-char cap (v0.34.0 crash.py policy)resolve_prompt_strategynarrowedexcepttoTypeErroronly (signature-shape ValueError now propagates)assert isinstance(spec, str)replaced with explicitraise TypeError(survivespython -O)- Tool endpoint Bearer auth gate (opt-in via
auth_tokenkwarg) - SSE
model+msg_idstripped of CRLF/NUL/oversize before frame-embedding (header-injection defence) - vLLM
/v1/messagesCORS restricted to loopback-only (was wildcard)
Known Limitations
POST /v1/tools/bashreturns HTTP 501 —/bin/sh -cchild-process escapes RLVR sandbox isolation; deferred to v0.53.8 pending container/namespace work.prompt_strategyimports an operator-named module — trusted-input policy; do NOT use with operator-controlled YAML on shared CI hosts./v1/tools/web_searchuseshttpxwith hard 5s timeout + 5-result cap; production callers wanting concurrency/retries should wrap externally.run_reciperesume rehydrates from per-node sidecar files; if the operator deletes those between runs, resume hits a missing-file error rather than silently re-executing.- Streaming
/v1/messagesSSE event shape matches Anthropic SDK ≥0.21; older clients parsing onlydata:lines withoutevent:headers may need an adapter.
Test Count
8051 → 8162 (+111 in tests/test_v0537.py). 190 test files. CI green across Ubuntu/macOS/Windows × Python 3.9/3.11/3.12.
🤖 Generated with Claude Code