What's New
21 features across 4 themes that close the polish gap with Unsloth Studio, axolotl, and LlamaFactory.
Live Monitoring
soup monitor- Rich Livenvidia-smi-driven dashboard: Util / Mem / VRAM / Temp / Power per GPU.--refresh 0.25-30interval,--oncefor a single snapshot. Apple Silicon hint deferred to v0.44.1.- EMA + p95/p99 tail latencies -
soup_cli.utils.tail_latencyships pure-Pythonupdate_ema/percentile/summarise_latencywithMAX_SAMPLES=1_000_000DoS cap. - SSE training-stream schema -
TrainEventfrozen dataclass +format_sse_frame(W3C SSE wire format). - Phone-visible URL + ASCII QR -
build_phone_urlenforces scheme allowlist, loopback-only HTTP, IPv6 auto-bracketing per RFC 3986; token in query string so the server actually receives it. - llama-server timings parser + KV-cache bar - tolerates missing keys; clamps
kv_cache_pctto[0, 100]. - Tool-call timer + thread-safe buffer -
ToolOutputsBufferiscollections.deque(maxlen=1000)with truncated previews.
UX Fixes
- Ctrl+C graceful save - first SIGINT writes a checkpoint and continues, second stops cleanly.
.checkpoint_nowtrigger file - touch<output_dir>/.checkpoint_nowto force a save (cwd-contained, symlink-rejected at the trigger).- Desktop / .command / .cmd shortcut builders - generate
.desktop/.command/.cmdlaunchers with shell-metacharacter rejection. - Onboarding wizard helper -
render_onboarding_yaml({base, dataset, task, quantization, epochs})returns a fully-validatedsoup.yaml.
Web UI
- Plugin registry - drop-in
soup_cli/ui/plugins/*.pyfiles register tabs viaregister_tab(name=..., title=..., render=...). Kebab-case allowlist + 32-tab cap + idempotent re-register. - Env knobs -
API_HOST/API_PORT/API_KEYfor the FastAPI server,GRADIO_HOST/GRADIO_PORTfor any Gradio sub-UI.
Standalone CLIs
soup fetch examples llama-3.1-8b-lora- bundled catalog of ready-to-edit configs (examples/configs/deepspeed_configsnamespaces). Symlink-rejection at write target + commonpath check on the bundled source.soup quantize <model> --to gguf --bits 4- ergonomic alias that prints the equivalentsoup exportinvocation (escaped viashlex.quote).soup merge-sharded-fsdp-weights- planner that discovers FSDP shard files; live torch-side consolidation in v0.44.1.soup delinearize-llama4- planner for Llama 4 expert weight reshape; live runtime in v0.44.1.soup llama <subcommand>- closed-allowlist proxy to llama.cpp binaries (cli/mtmd-cli/gguf-split/server/quantize) with filtered child env that dropsHF_TOKEN/OPENAI_API_KEY/ANTHROPIC_API_KEY/SOUP_*.- Standalone sweep config -
soup_cli.utils.sweep_config.load_sweep_yamlaccepts a separatesweep.yamlfor version-controlled hyperparameter search; strict scalar value allowlist +MappingProxyTypeimmutability. - Reasoning parser allowlist -
validate_parser_nameover a closed set (deepseek-r1/qwen3/phi4/openthinker) forsoup serve --reasoning-parser. Runtime hook in v0.44.1.
Install / Upgrade
pip install --upgrade soup-cliSecurity
soup fetch: symlink-rejection at write target (TOCTOU defence) + bundled-sourceos.path.commonpathcheck (catalog-escape defence).soup llama: child-env allowlist dropsHF_TOKEN/OPENAI_API_KEY/ANTHROPIC_API_KEYbefore exec.- Phone-URL token: routed through query string
?token=...not URL fragment (so the server actually sees it). .checkpoint_nowtrigger:os.lstat + S_ISLNKrejection at the trigger target before write.- Onboarding wizard:
outputfield cwd-containment via sharedis_under_cwd. - Sweep config: strict scalar allowlist on param values rejects nested dicts/lists smuggled through YAML.
- All frozen dataclasses with collection fields:
Tuple/MappingProxyTypefor genuine immutability (matches v0.32.0 / v0.39.0 / v0.41.0 policy).
Known Limitations
- Live SSE endpoint - schema + frame formatter ship;
/api/train/streamFastAPI route in v0.44.1. - Phone visibility CLI flag -
soup ui --public --auth-token+ QR print at startup deferred to v0.44.1. soup merge-sharded-fsdp-weights+soup delinearize-llama4- planners only; live torch-side runtime in v0.44.1.soup llama <sub>- llama.cpp binaries are not bundled; must be on PATH (actionableFileNotFoundErrorwhen missing).--reasoning-parser- allowlist ships; runtime hook into the inference loop in v0.44.1.- Apple Silicon
soup monitor- prints a yellow advisory and exits withnvidia-smi unavailablerc=1;powermetricsparser in v0.44.1.
Test count: 5628 -> 5820 (+192 net new tests).