v0.77.2, 2026-11-05
153 of the 159 pull requests in this release came from 30 people outside the maintainer.
Thank you: the Contributors section below names each of these contributors and what was found or built.
v0.77.2 is a cut of main after v0.77.1, not a backport: it carries every pull request merged since that tag. By the CHANGELOG count that is 6 additions, 5 changes, 2 removals and 117 fixes. Read the upgrade notes under Install / Upgrade before you upgrade a soup serve deployment that sets --tool-auth-token, a shell completion script, a script that checks exit codes, or a task: sft config on the vision, audio, MLX, Unsloth, RAFT or pre-tokenized path. Coming from v0.76.x or older, read the v0.77.0 notes first and run:
soup doctor --config soup.yamlEvery change, with its pull request, is in CHANGELOG.md, section [0.77.2]. Compare with the previous release: v0.77.1...v0.77.2.
What's New
Added
soup profile --modelanswers "will it fit?" without asoup.yaml(#2285). It prices the run set by--seq,--batch,--method lora|qlora|full,--lora-r,--optimizerand--gradient-checkpointingfrom the model'sconfig.json(a local directory, the Hugging Face cache or the Hub), with the same estimate as asoup.yamldescribing that run; when noconfig.jsoncan be read it exits 1 with the reason. On Apple Silicon,soup profileand the MCPprofiletool now compare the estimate with Metal's recommended working-set size instead of the whole unified memory, andsoup profile --jsonreturns alora_rfield.soup planandsoup applytake--minillm-on-policy(#2315), so an on-policy MiniLLM distill config is validated and hashed like any other, without rewriting YAML.soup applykeeps the flag in its suggested train command and still only records the plan.- MLX preference training (#2333):
backend: mlxwithtask: preferenceandtraining.preference_loss: dpo,orpoorsimporuns the native trainer. The config keepstask: preference;adapter_config.jsonrecords the native task. - MLX GRPO on pre-quantized 4-bit bases (#2386):
task: grpowithbackend: mlxnow trains on a base pre-quantized by mlx-lm at 4 bits inaffinemode (mlx-community/...-4bit,mlx_lm.convert -q). The quantized layers stay frozen and only the LoRA adapter trains; any other quantized base is refused right after the load, naming the first layer outside the rule.adapter_config.jsonrecordsbase_quantization. - Recipe
qwen3.5-0.8b-dpo(#2184), text preference pairs forQwen/Qwen3.5-0.8B, with inherited Qwen3.5 DPO settings rather than hyperparameters tuned for 0.8B. - Recipe
qwen3.5-27b-dpo(#2445), a text-only preference starting configuration forQwen/Qwen3.5-27Bwith inherited Qwen3.5 DPO settings, LoRA and 4-bit quantization. The catalog now has 173 recipes.
Changed
soup servechecks--tool-auth-tokenwith the rulesoup uiandsoup mcp serveuse, and the vLLM, SGLang and MII servers refuse a cross-siteOriginas the transformers server already did (#2329). Details and the one-line token command are in the upgrade notes.- One shared terminal-safe refusal for a
soup dataoutput that aliases an input, links and alternate path spellings included;soup data ingestalso refuses an output that names its source document before reading it (#2349). soup ship --progress jsonlreports live evaluation items after each generation chunk instead of after the whole suite; failed chunks retry only their own items, and scores and the event schema are unchanged.soup eval customand the forgetting probe use the same chunked path with unchanged results (#2421).- Transformers model loading uses the supported
dtypeargument instead of the deprecatedtorch_dtype, with the same precision and quantization choices (#2257). benchmarks/gate-h100-validation.mdnow says under finding 9 that the pinned arm in the 6.56x comparison was the wrong one; every number is unchanged (#2271).
Removed
- Six unused estimate functions of
soup_cli.utils.profiler(estimate_model_memory,estimate_trainable_params,estimate_lora_memory,estimate_optimizer_memory,estimate_activation_memory,estimate_total), with their tests.soup profileoutput is unchanged (#2369). - An unreachable
minillm_enabledcheck insoup trainwhen--minillm-on-policyis given (#2422).
Fixed: the ones that matter most
- No silent overwrites, no empty results. More
soup datacommands,soup adapters arithmeticandmergerefuse an output that names one of their inputs (#2274, #2349, #2379).soup distill-promptwith no usable prompt,soup data evolveandgen-magpiewhen every provider call failed,soup data filter --perplexitywithout torch or transformers,soup data dedup --fieldon an absent key andsoup registry pushon a run that is notcompletednow stop instead of writing an empty, unfiltered or unusable result (#2209, #2348, #2377, #2336, #2248). - Training.
data.max_lengthholds again for SimPO and KTO, and a prompt is cut only when the row does not fit (#1196). PPO no longer crashes at the first rollout with gradient checkpointing on, and checkpoints the policy outside 4-bit and 8-bit (#2319, #2340); PPO, GRPO and online DPO stop adding an input-gradient hook per step (#2373). MLX Adafactor applies the configured learning rate and schedule (#2484). Bothsoup mergepaths load the base at the Hub commit recorded in the adapter's training provenance (#2485).task: sftrefuses four settings on the paths that never applied them (#2278).soup bench trainmeasures 4-bit and 8-bit configs (#2216).soup train --gpus Nasks the confirmation once (#2250). - VRAM estimates. The optimizer step is priced as its own phase (#2338); a
task: prmstep is charged the logits of one position (#2337, #2372); a sharded FSDP or DeepSpeed run is priced per card (#2313); astream_loss_chunkstep is charged its last layer's recompute (#2290);backend: unslothis priced with the targets and dtypes its loader uses (#2376); the estimate says whenactivation_offloadingis set and not modelled (#2331). - Eval and ship.
soup ship --adapterrefuses an adapter whoselora_Btensors are all zero (#2434). Non-finite stored scores, regression tolerances and judge recheck limits are refused (#2477, #2464, #2493), and judge JSONL rows are checked before generation (#2494).soup eval quant-checkexits 3 on an unparseable--tasksfile before any model loads (#2185). - Server. A reply cut off at
max_tokensnow ends withfinish_reason: "length"(/v1/chat/completions) orstop_reason: "max_tokens"(/v1/messages) (#2380);/v1/messagesapplies the request'stemperatureandtop_p(#2388). - Loop, cloud and CLI.
soup loop watchresets the monthly spend when the UTC month changes andsoup loop statusshows what the next iteration will see (#2387, #2424). RunPod jobs bootstrap in a virtual environment and keep bounded failure diagnostics (#2352, #2256); Lambda install output reaches the log (#2282). Shell completion scripts work again (#2283).soup planandsoup applyname an unreadable config and exit 2 (#2323).soup doctornames GPUs hidden byCUDA_VISIBLE_DEVICES(#2206).soup ci init --pythonchecks the supported range (#2249). - Text shown as typed. More than 50 pull requests make
soup runs,soup registry,soup deploy,soup migrate,soup push,soup init,soup dataand many more commands print paths, names and messages as typed: brackets and:name:text are kept and terminal control characters are removed from the display only. What is left is under Known Limitations.
No gate ran for this release and the preprint is unchanged.
Install / Upgrade
pip install -U soup-cli # or: pipx upgrade soup-cli
soup --version # soup v0.77.2
soup doctor --config soup.yaml # before the first run of an existing config- From v0.77.1: a valid
soup.yamlloads unless it is atask: sftconfig with one of four settings on a path that never applied it; the upgrade notes below list the rest. - From v0.76.x or older: read the v0.77.0 notes first. Python 3.10 stays on v0.76.x (
pip install "soup-cli[train]<0.77"); AWQ and GPTQ export were removed in v0.77.0. This release supports Python 3.11 to 3.13. - Docker:
docker pull ghcr.io/makazhanalpamys/soup:0.77.2(alsolatest); the host driver must support CUDA 12.8.
Upgrade notes
A soup.yaml that loads on 0.77.1 loads on 0.77.2, unless it is a task: sft config that sets
one of four settings on a path that never applied it (second item). Coming from 0.76.x or older,
read the v0.77.0 release notes first and run soup doctor --config soup.yaml before the
first run of an existing config.
-
soup serve --tool-auth-tokenfollows the token rule ofsoup uiandsoup mcp serve:
16 to 128 characters fromA-Z,a-z,0-9,_and-. 0.77.1 accepted any non-empty
value; 0.77.2 exits 2 before the model loads, on every bind, whether the value comes from the
option or fromSOUP_TOOL_AUTH_TOKEN, and the message names the rule, never the value. All
three commands now match the whole value, so a token with a trailing newline is refused too.
Generate one withpython -c "import secrets; print(secrets.token_urlsafe(32))"and send the
same value asAuthorization: Bearer <token>(#2329). -
task: sftrefuses four settings on the paths that never applied them (#2278). 0.77.1
loaded them and trained without them; 0.77.2 refuses the config at load and names the field,
the setting that selects the path and what to change. A value offalseornullloads.Path Refused when set modality: visionormodality: audioreasoning_effort,train_on_eot,use_flash_attn,use_ligerbackend: mlxreasoning_effort,train_on_eot(use_flash_attn/use_ligerkeep their ignore warning)backend: unslothuse_flash_attn,use_ligerdata.format: raftreasoning_effort,train_on_eotdata.format: pre_tokenizedreasoning_effort(train_on_eotloads: the cache is keyed on it)Remove the key, or move the run to the path the message names.
stream_layers: trueand the
other tasks are unchanged. -
More commands refuse an output that names one of their inputs, before reading (exit 1).
soup data ingest <document> --output <same document>replaced the document with JSONL;
soup data persona-mix,generate,canary check,mix --optimize,forgeand
recipe --execute, andsoup adapters arithmeticandmergewith an--outputthat is an
input adapter, overwrote their input. Write to a new path. The shared refusal no longer starts
withError:(soup data doctor,lint) orPlan failed:(soup data forge); exit codes
are unchanged (#2274, #2349, #2379). -
MLX: two refusals are lifted, one is added (Apple Silicon only).
backend: mlxwith
task: preferenceandtraining.preference_loss: dpo,orpoorsimpowas refused at load;
it now runs the native trainer, the config keepstask: preference, andadapter_config.json
records the native task, so a resume matches whichever of the two spellings the config uses.
ipo,bcoandpreference_loss_weightsblends stay refused (#2333).task: grponow trains
on a base pre-quantized by mlx-lm at 4 bits inaffinemode (mlx-community/...-4bit,
mlx_lm.convert -q); any other quantized base is refused right after the load, naming the
first layer outside the rule;quantization: 8bitstays refused at load, reworded; and
adapter_config.jsongainsbase_quantization(#2386). MLX DPO--resumenow refuses an
adapter of another task or base, an MLX SFT adapter included (#2321). -
Exit codes that changed:
Command and case 0.77.1 0.77.2 soup eval quant-check, unparseable--tasksfile1, after loading both models 3, before (#2185) soup distill-prompt, no trace row has a prompt0, empty output written 3, output untouched (#2209) soup data evolve/gen-magpie, every provider call failed, no row0, output emptied 1, output kept (#2348) soup data filter --perplexity/--score-onlywithout torch or transformers0, unfiltered or partial 1 (#2377) soup data dedup --field <key>absent from every row0, distinct rows dropped 1 (#2336) soup registry push --run-idon a run that is notcompleted0, entry registered 1 (#2248) soup plan/soup apply, malformed YAML or a config that cannot be read1, with the raw parser or OS error 2, naming the config and the YAML location (#2323) soup quantize --to "[/]"(a value Rich read as markup)1 2 (#2217) soup ship --progress jsonl, Ctrl+C1 130 (#2417) soup loop status, stored spendNaNorInfinity0, printed $nan2 (#2424) -
The VRAM pre-flight prices some runs differently. A short full fine-tune with
adamw_torchis priced higher (the optimizer step is its own phase), so inside the fitted range
the pre-flight can now refuse one it let through;--allow-oom-attemptstill launches it
(#2338). A run sharded with--fsdp full_shard,full_offload,shard_grador DeepSpeed
ZeRO-2/3 is priced per card and only warned about (#2313). Atask: prmstep is priced lower
(#2337, #2372); astream_loss_chunkstep higher (#2290);backend: unslothis priced with its
seven automatic LoRA targets and 16-bit embeddings and output head (#2376). -
Server replies. On the transformers backend and MoLE, a reply cut at
max_tokenswithout
an end token now ends withfinish_reason: "length"(/v1/chat/completions) or
stop_reason: "max_tokens"(/v1/messages) (#2380)./v1/messagesapplies the request's
temperatureandtop_p; a value out of range ornullis 400 instead of the default (#2388).
The vLLM, SGLang and MII servers answer a generation request whoseOriginnames another site
with 403, as the transformers server did (#2329). -
Shell completion: scripts written by
soup completions bash|zsh|fishbefore 0.77.2 do not
complete; run the command again and replace the installed script (#2283). -
Python API:
soup_cli.utils.profilerno longer hasestimate_model_memory,
estimate_trainable_params,estimate_lora_memory,estimate_optimizer_memory,
estimate_activation_memoryorestimate_total(no caller since #2146 in 0.77.1, so their
numbers were not whatsoup profileprinted). Usesoup profile --json; the estimate itself is
soup_cli.utils.vram_estimate.estimate_vram(#2369). -
Smaller changes that alter a result:
soup data from-traces --signal thumbs_up, and the harvest stage ofsoup loop, pair a
thumbs-up and a thumbs-down answer that differ, and skip a prompt whose answers are all the
same text; 0.77.1 could write a pair whosechosenandrejectedwere identical, so the
number of pairs from the same logs can change (#2495).- MLX Adafactor (
backend: mlx,training.optimizer: adafactor) applies the configured learning
rate, warmup and schedule, so an existing run trains differently (#2484). - Both
soup mergepaths load the base at the Hub commit recorded in the adapter's training
provenance, not the latest one. WithHF_HUB_OFFLINEset and that commit not cached, the
merge now fails where 0.77.1 merged whatever was cached (#2485). soup ci init --pythonrefuses a version outside 3.11 to 3.13 with exit 1 (#2249).soup eval compareandsoup eval leaderboardrefuse a stored score that is not finite, with
exit 1 (#2477);ensure_judge_calibrated(Python API) refuses a non-finitemin_agreementor
max_bias(#2493); a judge task refuses a JSONL row that is not an object or whosepromptis
not a string, naming the file and line (#2494).soup ship --adapterreturns DON'T SHIP with the ruleadapter_noopfor an adapter whose
lora_Btensors are all zero (#2434).- On Windows,
soup adapters bisect --eval-commandsplits the template without POSIX quoting:
single quotes and a quote inside a word no longer group words, so write"{ckpt}"in double
quotes (#2314).
Security
This release includes security hardening fixes; details follow through the project's advisory process (see SECURITY.md).
Known Limitations
New in this release:
- On Apple Silicon,
task: preference(DPO, ORPO and SimPO only; IPO, BCO andpreference_loss_weightsblends stay refused) and MLX GRPO on 4-bitmlx-communitybases are covered only by the hosted macOS MLX test job. MLX GRPO still refuses--resume, 8-bit and mixed-bit bases,mxfp4,mxfp8andnvfp4, quantized MoE and BitNet layers,lora.r: 0, custom or ensemblereward_fnsettings and non-text modalities. Themlxextra's declared floor is tracked in #2471. - The VRAM estimate: the per-card estimate of a sharded run is fitted on single-card runs, so it warns and never refuses; the
stream_loss_chunkrecompute charge is measured on one model and one card and does not cover fusedgate_up, MoE layers or LoRA on MLP modules;training.activation_offloadingis not modelled (the estimate says so when it is set); the Unsloth pricing rests on one load-and-inject record with no training-peak measurement. - KTO and BCO on trl 0.29: a row whose prompt is cut to
max_length // 2loses its BOS token (#2487), and the KTO length cap reads the whole answer columns into memory (#2486). soup adapters bisect --eval-commandon Windows splits the template without POSIX quoting: write"{ckpt}"in double quotes (#2488).- Text shown as typed, what is left: the
:name:emoji codes still expand in the diagnosticssoup eval compareandsoup eval leaderboardprint for a non-finite stored score (added in #2477) and in many other modules; the tracker that lists them is #2489. - Text shown as typed: a backslash before a
[that is not a complete markup tag is dropped when a path or name is printed bysoup env lock,soup init,soup shrink,soup data mix --apply,soup draft distillandsoup registry show, andsoup export --format "[/x]"ends in a markup error with exit 1 (#2533). - Text shown as typed:
soup doctor --configwith a Windows path that contains a colon can expand an:name:code in itsConfig file ... cannot be readline, and thesoup draft distill --plan-onlyYAML preview wraps at the console width (#2489, #2536). soup ci init --pythonstill accepts03.11and3.011and writes them into the workflow as typed (#2534).- A judge task in the eval gate checks its JSONL row by row, so a bad row at line 500 is found after 499 generations (the check arrived in #2494) (#2535).
- Partial fixes whose issues stay open: only the MLX Adafactor slice of the settings a backend never applies is fixed, and the rest stays open (#1811); only
soup mergepins the recorded base commit, and an offline merge now needs that snapshot cached (#1902);qwen3.5-0.8b-dpoandqwen3.5-27b-dpouse inherited settings and are not tuned or measured (#275); the RunPod virtual-environment bootstrap has not been validated on a live Pod (#2192, #2098). - Not exercised by hand before this release: any GPU path, MLX itself, the
Origincheck of the vLLM, SGLang and MII servers, the RunPod bootstrap, the Ctrl+C exit code 130 ofsoup ship --progress jsonl, and a merge at a recorded Hub commit. The pre-release smoke run was on CPU.
Carried over from v0.77.1, still open:
training.fast_lorahas no speedup claim and no end-to-end claim; its correctness half is open (#792).training.stream_recomputeis SFT only;autoworks on the RAM tier only, gains nothing on a read-bound disk tier, and at a high VRAM fill it is slower.- Kimi K2 admission is verified on CPU with a tiny K2-shaped checkpoint only; nothing has been trained on K2. Its tokenizer needs
--trust-remote-codeandpip install tiktoken. Resident K2 loads are refused at load, and Kimi-K2-Thinking and Kimi-K2-Instruct-0905 have no supported route yet (#2104). stream_expert_layout: per_expertcovers the DeepSeek-V3 family only and costs step time (about 2x to 2.7x on Moonlight-16B); a non-NVMe cache volume is warned about.two_read_expertshas no hardware speed record yet (#2170).- After upgrading, the first pinned layer-streamed run re-shards into a new
<slug>@<commit>cache slot; the old slot stays on disk and nothing names or removes it (#2196). - The RunPod controller has not been run against a real RunPod account (#2098); local input files are not uploaded.
soup export --format ggufstill clones llama.cppb5270, which cannot convert Qwen3.5; it refuses before cloning and names--llama-cpp <dir>(#1911).- Base-revision binding covers the transformers backend and
soup merge; Unsloth and MLX loads, and local or cached-path hints, are not bound yet (#1902). lora.rank_patternandalpha_patternare refused on MLX and Unsloth until those trainers apply them (MLX: #1996).freeze_layersandfreeze_ratiowith LoRA need a list oflora.target_modules; a regex,all-linear,lora.target_parametersand VeRA are refused when the model is built (#2201).soup merge --low-memoryrefuses adapters it cannot reproduce exactly (DoRA,modules_to_save, rank or alpha patterns, embedding adapters) and names the regular merge instead.soup serve's/v1/tools/pythonis unavailable (501) on Windows and on Linux with Python 3.11, as/v1/tools/bashalready was.- Native MLX inference covers text LoRA adapters only;
soup chaton MLX is open (#1986, #2123). - Still open from v0.76.0: fields that reach no consumer outside the staged table (#1814),
soup doctor --configcoverage (#1815) and config-error wording (#1816). - Layer streaming remains BETA and opt-in;
--cuda-graphsremains experimental.
Fixed since v0.77.1 and no longer limits: SimPO and KTO rows past data.max_length (#1185), the unmeasured stream_loss_chunk peak (#1693), the soup data commands not yet checked for output aliases (#2226), soup plan and soup apply without --minillm-on-policy (#2303), the refusal of MLX task: preference for DPO, ORPO and SimPO (#2202), the dense-only MLX GRPO baseline (#1976) and rows of an unknown shape that were named nowhere (#1818).
Contributors
Grouped by person, in order of merged pull requests; each line says what was found or built. 30 people outside the maintainer, 153 merged pull requests. Thank you to all 30.
- Nariman Abdikarim (@Nari-Ab), 69: text shown as typed in more than 50 pull requests, with brackets and
:name:text kept and terminal controls removed (soup runs,soup registry,soup deploy,soup migrate,soup pushand many more); shell completion scripts restored (#2283);--minillm-on-policyonsoup planandsoup apply(#2315);dtypefor Transformers loads (#2257); Windows paths insoup adapters bisect --eval-command(#2314); named config read errors insoup planandsoup apply(#2323); GPUs hidden byCUDA_VISIBLE_DEVICESinsoup doctor(#2206); Dockerlatestkept on the newest stable release (#2214); bounded RunPod failure diagnostics (#2256); JSON diagnostics kept on stderr forsoup costandsoup profile(#2345, #2398); recorded zero metrics insoup why(#2344); Click-safe test runners (#2189, #2334) - Nurkhan Esenbek (@kok-o), 16: output-over-input refusals for the remaining
soup datacommands andsoup data ingest(#2274, #2349);soup data evolveandgen-magpiekeep their output when every provider call fails (#2348);soup data filter --perplexityfails without its dependencies (#2377);soup data dedup --fieldon an absent key (#2336); thumbs-up pairs that differ (#2495); livesoup ship --progress jsonlitems per chunk (#2421); the RunPod bootstrap in a virtual environment (#2352); corrected DPO demo pairs (#2335); the recipesqwen3.5-0.8b-dpoandqwen3.5-27b-dpo(#2184, #2445); benchmark, test and docs records (#2172, #2183, #2354, #2413, #2273) - Yang Bai (@ybai08), 11: the VRAM pre-flight charges a
stream_loss_chunkstep's last-layer recompute (#2290), prices a sharded run per card (#2313) and a PRM step's logits (#2337, #2372), and says it does not model activation offloading (#2331); PPO gradient checkpointing (#2319, #2340); one input-gradient hook across PPO, GRPO and online DPO steps (#2373); MLX GRPO on pre-quantized 4-bit bases (#2386); a streamed DeepSeek-V3 test for DPO, ORPO, SimPO and KTO (#2291); MLX TF32 default off in the native tests (#2391) - Abdulwaarith Zakariyya (@abdulwaarith0), 8:
soup profile --model(#2285);task: sftrefuses the four settings a path never reads (#2278); the optimizer step as its own phase of the VRAM peak (#2338);finish_reason: "length"replies (#2380); the monthly spend reset insoup loop watchand the state shown bysoup loop status(#2387, #2424); the Fast-LoRA timing harness (#2287); the Windows CI bf16 skips (#2346) - Tal (@taljeon), 5: eval batches that mutate their input (#2463), a non-finite regression tolerance (#2464), non-finite stored scores (#2477), non-finite judge recheck limits (#2493) and judge JSONL rows checked before generation (#2494)
- EtherealMelon (@EtherealMelon), 4: rows Soup cannot interpret are named instead of dropped (#2281); Lambda install output kept in the log (#2282);
soup train --resumenames the path it searched (#2389); three tests no longer depend on the machine (#2318) - Faisal Fayaz (@Faisal-Fayaz), 4:
soup eval quant-checkexits 3 on an unparseable--tasksfile (#2185); the #792 CUDA rows rewritten against the 2x float64 rule (#2188); NF4 streaming ando_projFast-LoRA coverage (#2328); the unlisted MLX tests run inmlx-smoke(#2342) - vaputa (@vaputa), 4: MLX
task: preference(#2333);soup ship --progress jsonlerrors and exit 130 on Ctrl+C (#2417); MLX Adafactor with the configured learning rate and schedule (#2484);soup mergeat the recorded base revision (#2485) - Ryzn (@ryznren), 3: Unsloth targets and 4-bit weight dtypes in the VRAM estimate (#2376); duplicate README stamps and banners rejected by a test (#2316); GRPO judge reason length boundaries covered (#2317)
- Aditya Pratap Singh (@akkupratap323), 2:
soup distill-promptrefuses traces with no prompt instead of emptying its output (#2209); the strip-before-escape order for bidi and invisible format characters pinned (#2350) - Sharvin (@Guts1005), 2:
soup registry pushrefuses runs that are not completed (#2248);soup ci init --pythonchecks the supported range (#2249) - Harry C (@harryc295), 2: a skipped near-duplicate check in
soup data lintreads SKIPPED, not OK (#2411); CONTRIBUTING namesscripts/sync_recipe_count.py(#2394) - Harshit Sharma (@harshitthek), 2:
resolve_device("auto")resolves to a real device (#2396); CPU GRPO numerical probes (#2364) - WU Leizhi (@MbappeWU), 2: the MLX rsLoRA alpha rebuilt as
scale * sqrt(rank)insoup adapters audit(#2255);/v1/messagesappliestemperatureandtop_p(#2388) - ShryukGrandhi (@ShryukGrandhi), 2:
soup adapters arithmeticandmergerefuse an output that names an input adapter (#2379);soup ship --adapterrefuses an adapter whoselora_Btensors are all zero (#2434) - shubham-dev-stack (@Shubham-dev-stack), 2: an unreachable
minillm_enabledcheck removed (#2422); the MLX test scan memoized (#2504) - Vansh Sharma (@VanshSharmaPES), 2:
soup bench trainmeasures 4-bit configs whose adapters TRL casts to bf16 (#2216); the T4 forecast bracket measured against a real tokens-per-second figure (#2230) - King's MAN (@CG-5228), 1:
soup train --gpus Nasks the confirmation once and passes--yesto the child ranks (#2250) - Columbus Labs (@ColumbusLabs), 1:
soup quantize --to awqandgptqname their v0.77.0 removal, and a--tovalue is shown as typed (#2217) - Mayuri (@mayuriphad), 1: MLX DPO
--resumerefuses an adapter of another task or base (#2321) - Matt Van Horn (@mvanhorn), 1: Rich markup in
soup datapaths and flags no longer raisesMarkupError(#1882) - Sohaib Kamash (@Nick-800), 1:
soup infer --cuda-graphsinspects a local adapter's recorded base before the load (#1942) - Ben Younes (@ousamabenyounes), 1:
data.max_lengthenforced across the SimPO, KTO, IPO and BCO wrappers (#1196) - qwist1233-cpu (@qwist1233-cpu), 1: the unused estimate functions of
utils/profiler.pyremoved (#2369) - Samarth Mukhija (@Samearth17), 1:
soup doctor --configdrops MLX support rows that config loading refuses (#2258) - Shivansh Shukla (@ShivanshShukla), 1: the Aider benchmark container is removed on timeout and Ctrl+C (#2280)
- Baktiyar Ablaikhan (@sronters), 1: k-bit logits memory overhead pinned by a test (#2351)
- Tektrix (@Tektrix), 1: the mypy errors added in v0.77.1 annotated and narrowed (#2320)
- Tejas (@TejasS1233), 1: stale v0.77.0 help text corrected (#2268)
- xiemocun (@xiemocun), 1: the pinned arm in the 6.56x comparison of
benchmarks/gate-h100-validation.mdmarked as the wrong one (#2271)
Reports that led to fixes in this release: @Batyrkhantzy111 (#2359, #2360), @abdulwaarith0 (#2288).