We're releasing our new updated Docker image along with multi-user accounts, RDNA1+2, FP8/INT8 diffusion support, ARM64 CUDA Windows support and many training, GRPO and inference improvements
Highlights:
- New Docker with NVIDIA & AMD support: Guide
- Multi user accounts with isolation Settings > Accounts
- INT8/FP8 Image Diffusion inference - 2x faster
- ARM64 Windows CUDA support for training, inference
- GRPO improvements - Qwen3.5 support + lastest TRL, vLLM support
- RDNA1, RDNA2 support for AMD
- Better Windows NVIDIA GPU detection and recovery
Updated Docker image
- Updated the main CUDA image and Studio setup, removed bundled caches, and restored Unsloth's training patches on GPU hosts.
- Studio data persists on a volume without pinning application code. Updates, generated passwords, configurable ports, and package preservation are improved.
- Added an AMD ROCm image alongside CUDA for supported Linux hosts.
Multi-user accounts
- Create accounts from Settings > Accounts, with one-time setup codes and individual passwords.
- Keep each account's work separate while sharing a loaded model when settings match. Existing single-account behavior stays unchanged.
Chat + reasoning
- Edit, reorder, and steer queued prompts, including while a local model loads.
- Added GGUF reasoning budgets, configurable chat width, desktop interface scaling, and a more compact composer.
- Improved long-reasoning responsiveness, chat-history preservation, and handling of tool-generated files and images.
Hardware + inference
- MLX gains video input, optional MoE and decode optimizations, and more reliable multimodal chats.
- Improved GGUF memory estimates, DGX Spark handling, NVIDIA detection, NVLink checks, and user-selected GPU ordering.
- Added native Windows ARM64 desktop packaging, Qwen3.5
fast_inference, and Ascend NPU device detection.
Research + API
- Deep Research better preserves unfinished reports, handles JSON output, and reports runs without evidence. Scanned PDF uploads gain a local OCR fallback.
- Improved provider reasoning controls, MCP compatibility, tool calling, and streamed error reporting.
- Added video input on
/v1/chat/completionsand access to installed Ollama models through the API.
Training + installation
- Added Data Recipes dataset downloads and fixed 16-bit fine-tune exports, LoRA saves, and Push to Hub.
- Improved dataset handling, training memory estimates, and checkpoint saving on container shutdown. Core fixes cover normalization, RoPE, Q-GaLore, and distributed device selection.
- More reliable Windows installs, GPU package repair, dependency caching, and verified offline installs.
Security + tool execution
- Strengthened credential protection and tool-call validation, with approval requests for file access outside the sandbox.
- Added preview OS-level tool sandboxing on supported Linux and macOS hosts. Network access remains unrestricted, and automatic mode retains existing safeguards when OS isolation is unavailable.
What's Changed
- Bump install.sh / install.ps1 pin to unsloth>=2026.9.4 by @danielhanchen in #10640
- Stop the uninstaller stranding old installs, and deleting directories that are not ours by @danielhanchen in #10471
- Studio: correct the keyless tunnel copy, which promised more than the code does by @danielhanchen in #9690
- fix(studio): keep GGUF compaction for multimodal chats by @Biotrioo in #10158
- Fix Deep Research JSON output on MLX and Transformers by @Imagineer99 in #10611
- Fold duplicated backend, hub and package tests into parametrized runs by @danielhanchen in #10499
- Studio: reuse the named CLI API key across studio run by @claxman in #10608
- Unbreak main: compare the autoload guard's conditions, not its exact text by @danielhanchen in #10654
- Fix scanned PDF uploads with local OCR fallback by @Imagineer99 in #10620
- Studio: size a local model by one copy of its weights by @NilayYadav in #10558
- Studio: keep the LoRA rank, alpha and variant when leaving CPT by @NilayYadav in #10555
- Studio: stop a generation recovery deleting the turn's tool calls by @shimmyshimmer in #10584
- Studio: only strip a valid trailing IMAGES/RAG_SOURCES envelope by @NilayYadav in #10668
- Read the installers' own code, not the scripts they emit by @danielhanchen in #10701
- Raise the startup bundle budget to where main actually is by @danielhanchen in #10702
- Studio: gate GGML_CUDA_P2P on a confirmed NVLink fabric, not a product name by @danielhanchen in #10646
- Studio: stop pricing an Anthropic image by its base64 length in KV admission by @NilayYadav in #10669
- Block markerless execution-class tool-call promotion in Studio by @danielhanchen in #10507
- Studio: fail a Deep Research run when no step gathered any evidence by @NilayYadav in #10663
- Studio: keep literal text visible when the request turns thinking off by @NilayYadav in #10662
- Studio: keep an uploaded document's own name instead of replacing it with underscores by @NilayYadav in #10667
- CI: trigger Studio smokes on what they observe, run install matrices as a PR subset, fold Chat UI shards by @danielhanchen in #10689
- Windows No Compiler CI: see the intermediates the compiler cleaned up by @danielhanchen in #10711
- Studio: keep the output a timed-out python or terminal call already produced by @NilayYadav in #10664
- Studio: fit the composer on narrow screens, and scale the greeting with it by @shimmyshimmer in #10694
- Studio: recover the GPU capacity nvidia-smi will not report on a DGX Spark by @danielhanchen in #10703
- fix: materialize strided gradients before RMSNorm backward by @MrCapricornLiu in #10617
- fix: exclude padded logits from softcapped cross entropy by @MrCapricornLiu in #10616
- Studio: keep a chat working after switching to a model without tool support by @NilayYadav in #10454
- Reduce comment volume across studio/backend/core by @danielhanchen in #10502
- Reduce comment volume across the studio frontend and backend routes by @danielhanchen in #10503
- Reduce comment volume across the installers, CLI, unsloth package and backend utilities by @danielhanchen in #10504
- Cover the restore of every variable the install.ps1 handoff block saves by @danielhanchen in #10566
- Studio: stop refusing a diffusion load on a DGX Spark against its own download by @danielhanchen in #10705
- Refuse to format when ruff cannot run, and stop the fixed-point guard skipping itself away in CI by @danielhanchen in #10726
- Let a Deep Research handoff survive a preamble beside the tool call by @BluePlexus in #10677
- Keep the surrounding {{ }} when stripping bos_token from a chat template by @vineethsaivs in #10682
- Studio: honor the vision run's gradient checkpointing setting by @NilayYadav in #10666
- Send the thinking toggle to a "custom" provider by @BluePlexus in #10678
- MLX CI: give the llama-server health wait the same 180s budget as the other health waits by @danielhanchen in #10674
- Unbreak main: raise the startup transfer budget to the margin it shipped with by @danielhanchen in #10700
- Upload merged models to the requested branch or pull request by @NilayYadav in #10760
- Studio: keep long reasoning responsive with bounded pages by @wasimysaid in #10717
- Studio: narrower desktop window and a sidebar edge trigger by @shimmyshimmer in #10706
- Studio: Show Anthropic web search errors by @NilayYadav in #10757
- Studio: Keep images returned by tools by @NilayYadav in #10762
- Studio: Show an error when chat history cannot be restored by @NilayYadav in #10761
- fix(dataprep): don't append EOS to full-size mid-stride chunks by @caiotheodoro in #10734
- Windows installer: fix installs when the user profile path contains a space by @oobabooga in #10765
- Stop capping unsloth chat at 512 tokens and the transformers/MLX paths at 2048 by @NilayYadav in #10665
- Reject conflicting model loading settings by @NilayYadav in #10756
- Docker Studio: stop disabling Unsloth's TRL patches on GPU hosts by @oobabooga in #10825
- Unbreak main, and fix the five causes reddening the PR backlog by @danielhanchen in #10832
- Stop a comment in unsloth_zoo from silently disabling the patched SFT trainer by @danielhanchen in #10854
- Ask the vllm-free import tests in a clean interpreter, not in sys.modules by @danielhanchen in #10855
- Re-format the two lines that drifted, so pre-commit stops failing on main by @danielhanchen in #10715
- Studio: per-account isolation for shared installs and the desktop app by @danielhanchen in #10588
- Use the short RoPE factor at exactly original_max_position_embeddings by @vineethsaivs in #10681
- fix: do not default-on tool-call nudging on the external loop by @apurv-1 in #10685
- Track vLLM tags through 0.29, and pin the bitsandbytes symbols by @danielhanchen in #10858
- Give Repo tests (CPU) a budget it fits in, and name the patcher when it falls back by @danielhanchen in #10862
- Studio: keep a stopped prompt in later chat turns by @claxman in #10625
- Studio: accept zero-based shard numbering in cached model weights by @JohannesGezachew in #10857
- Stop the CUDA spoof from deciding whether a GPU test skips by @danielhanchen in #10864
- Studio: read the NVLink fabric from NVML instead of a 1.2s nvidia-smi shell-out by @danielhanchen in #10720
- Studio: stop the log redactor backtracking quadratically on a cut ANSI sequence by @danielhanchen in #10721
- Ask the spoof-survival question in a subprocess, not in the worker by @danielhanchen in #10866
- Studio: prefill MLX VLM prompts at mlx-vlm's default step, fix cold-path position ids by @Lyxot in #10778
- Pair the linearity measurements, so a busy runner stops reading as quadratic by @danielhanchen in #10868
- Studio: add a Download all logs button to Settings > Logs by @danielhanchen in #10719
- Speed up the three slowest tests without changing what they check by @danielhanchen in #10867
- Clear the metadata directory cache before scanning installed records by @xy200303 in #10797
- Studio: Keep API keys from training with the server's Hugging Face login by @NilayYadav in #10809
- Studio: Export a full fine-tune as a real 16-bit model by @NilayYadav in #10808
- Studio: Show an error when Anthropic fails a reply partway through by @NilayYadav in #10811
- Studio: Let the agent run a command again after it edits a file by @NilayYadav in #10810
- Studio: Stop at the requested stop text on transformers models by @NilayYadav in #10812
- Stop clean_text deleting every non-ASCII character by @vineethsaivs in #10741
- Let a duplicate tool call re-run after an intervening call (#10792) by @deepspace28 in #10846
- fix(studio): avoid resident GGUF mappings for Windows no-reserve loads by @Imagineer99 in #10618
- Studio: Estimate training memory correctly so the chat model can stay loaded by @NilayYadav in #10815
- Name the method on the uploaded model card by @vineethsaivs in #10816
- Replay tool-call arguments in the order the model generated (#10791) by @deepspace28 in #10845
- Fix fp8 block dequant fallback on pre-sm89 GPUs by @xy200303 in #10790
- Studio: Stop Deep Research deleting links from code in its report by @NilayYadav in #10814
- Fix Q-GaLore quantization of single-sign groups by @vineethsaivs in #10841
- Fix RAG dense retrieval on older SQLite runtimes by @alkinun in #10861
- Docker: drop the baked uv cache from the Studio image and correct its labels and Hub page by @oobabooga in #10827
- installer: the adaptive uv cache selection was unreachable on every writable install by @danielhanchen in #10626
- Studio: Stop training the word None into CSV rows with blank cells by @NilayYadav in #10813
- Skip the backgrounded-raw-bind prompt test on Windows by @danielhanchen in #10885
- Fail closed when Studio exposure prompt is aborted by @wasimysaid in #10638
- Docker Studio: keep Studio's data on a volume without pinning its code by @oobabooga in #10829
- Docker: stop JupyterLab from silently taking Studio's port, and correct three host-script messages by @oobabooga in #10828
- Advance the Q-GaLore Adam step counter once per update by @vineethsaivs in #10842
- Run the Q-GaLore tests from the normal pytest job, not a workflow of their own by @danielhanchen in #10898
- Accept the model transformers 5.x passes to create_optimizer by @danielhanchen in #10887
- Fix three CI failures that were not the PRs they failed on by @danielhanchen in #10896
- Pass Q-GaLore optimizer options to bitsandbytes by name by @vineethsaivs in #10874
- Split Repo tests (CPU) into three shards, and take the shell suite off its critical path by @danielhanchen in #10882
- Stop three studio meta-tests re-cutting and re-walking the same sources by @danielhanchen in #10886
- Give every pwsh call in the suite the private startup cache by @danielhanchen in #10900
- Share one child interpreter, and one notebook prototype, where the work is identical by @danielhanchen in #10893
- installer: stop condemning a warm uv cache for a directory uv never writes by @danielhanchen in #10899
- perf(studio): integrate optional MLX MoE and decode optimizations by @Lyxot in #10733
- Studio: skip dependency-pass steps whose evidence holds, and keep that evidence on Windows by @danielhanchen in #10649
- Allow fast_inference for Qwen3.5 by @danielhanchen in #10891
- Studio: add Server default for vLLM Min P by @Etherll in #10623
- Unbreak main: three files drifted out of the formatter, and one reads a file with the platform encoding by @danielhanchen in #10913
- The install suite spends 1940s resolving the same few thousand paths over and over by @danielhanchen in #10916
- Measure whether the runner label actually changes the queue wait by @danielhanchen in #10914
- Studio: cap accelerate below 1.15 on Windows, where 1.15 breaks all ROCm training by @LeoBorcherding in #10819
- Studio: read a video clip on MLX chat models by @Lyxot in #10480
- Move the two highest-fire workflows off the ubuntu-latest label onto the same image by @danielhanchen in #10918
- Add Agent Skills support to Studio by @wasimysaid in #10247
- Studio: two edge failures the dependency-pass change left behind by @danielhanchen in #10915
- Studio: keep a verified install when PyPI is unreachable and UV_OFFLINE is set by @danielhanchen in #10651
- Studio: adapt macOS tray artwork to the menu bar appearance by @wasimysaid in #10880
- Prevent agent startup from waiting on model catalog scans by @Imagineer99 in #10728
- Studio: drop MediaPageLink tooltip below titlebar controls on Windows by @Souravrajvi0 in #10253
- use the bundled icon first, and retry the cloudflared download by @NilayYadav in #10680
- Docker Studio: keep unsloth-studio-update --ref from leaving Studio dead by @oobabooga in #10826
- Studio: answer current llama.cpp, whisper.cpp and Node installs from their markers by @danielhanchen in #10648
- Studio: do not lose a DGX Spark's memory pool to the page cache when fitting context by @danielhanchen in #10704
- Studio: block sandbox bypass via command-position substitutions in terminal tool by @veriepicc in #10860
- Honor user tensor_split when auto tensor-parallel planner returns an even split by @chakshu-dhannawat in #10884
- fix(studio): share Run settings draft across sidebar and model picker by @Souravrajvi0 in #10851
- Stop ten test assertions from measuring the runner instead of the code by @danielhanchen in #10897
- Use the dynamic cache for Gemma multimodal generation by @danielhanchen in #10903
- feat(docker): add an AMD ROCm image, for RDNA2 through RDNA4 and CDNA by @LeoBorcherding in #10820
- Drop an MTP sidecar llama-server cannot load as --model-draft by @Lyxot in #10197
- Studio: run the formatter on llama_cpp.py by @danielhanchen in #10926
- Studio: Use saved Hugging Face login for model downloads by @NilayYadav in #10758
- Shard the Python 3.13 backend pytest leg three ways by @danielhanchen in #10920
- Run the unsloth_zoo suite beside Core instead of inside it by @danielhanchen in #10919
- Release GGUF context while tool approval is pending by @Imagineer99 in #10673
- Studio: add Download Dataset button for Data Recipes by @Souravrajvi0 in #10708
- Studio: a CPU torch handover must not disarm the flavor invariant by @danielhanchen in #10906
- Studio: Keep unfinished research reports by @NilayYadav in #10759
- Studio: an AMD Windows host without usable ROCm takes Vulkan, not the CPU bundle by @danielhanchen in #10908
- Studio: a masked NVIDIA GPU must not install the CPU bundle over CUDA by @danielhanchen in #10909
- Studio: raise the micro-batch for the projectors that abort llama-server on an image by @chakshu-dhannawat in #10683
- fix(chat_templates): remove CUDA hardcoded device from stopping criteria by @li-lizhe in #10684
- feat(device_type): add Ascend NPU device detection by @li-lizhe in #10686
- fix(sentence_transformer): resolve device consistently with sibling branches instead of hardcoding cuda by @li-lizhe in #10843
- Studio: build the blocked-command alternation once instead of per call by @danielhanchen in #10927
- fix(studio): stop MLX native controls from duplicating in streamed replies by @Lyxot in #10905
- docker publish: drop the build caches by @danielhanchen in #10959
- studio: compact the chat composer and add animated expansion by @mahiatlinux in #10863
- Studio: Show local LM Studio, Ollama and Hermes models when running in Docker by @NilayYadav in #10936
- Studio: keep the operator's package-manager policy in the installer by @danielhanchen in #10902
- desktop: add interface scaling setting by @mahiatlinux in #9666
- Studio: keep created files outside the collapsed tool card by @claxman in #10446
- Tests: stop the live no-torch server test from uninstalling torch from the Studio venv by @oobabooga in #10955
- Studio: make the model use the tool the client asks for by @NilayYadav in #10939
- Studio: reinstall a missing PyTorch when unsloth studio update finds the package current by @oobabooga in #10956
- studio: configurable HuggingFace endpoint via HF_ENDPOINT env var by @AdamPlatin123 in #4989
- Studio: tell the model when a tool returns audio or a file by @NilayYadav in #10940
- Studio: fix Push to Hub for base and quantized exports by @NilayYadav in #10943
- Studio: keep earlier messages in chats with images by @NilayYadav in #10944
- Studio: tell Codex when a chat is too long for the model by @NilayYadav in #10938
- Studio: keep nested tool call fields llama.cpp drops when written out of order by @NilayYadav in #10935
- Use model-neutral image generation tooltips by @shimmyshimmer in #10782
- Allow removing missing images from the gallery by @shimmyshimmer in #10781
- Fix inline Python plot rendering and downloads by @shimmyshimmer in #10954
- Studio: remove New badges from Remote & LAN and Shortcuts by @shimmyshimmer in #10967
- Studio: keep replaced replies out of ShareGPT exports by @NilayYadav in #10941
- Studio: prevent chat options hover circle from overlapping titles by @shimmyshimmer in #10969
- Studio: leave top_p out of external requests when set to Off by @NilayYadav in #10934
- Studio: show the right reasoning effort and image options for every API model by @NilayYadav in #10933
- Studio: make studio/setup.sh read the recorded uv cache, and probe the cache the CLI hands it by @danielhanchen in #10647
- studio: centre the chat column by reserving the scrollbar gutter on both edges by @shimmyshimmer in #10966
- Name the Ascend NPU as its own tests expect, and close the spoofable skip-guard hole by @danielhanchen in #10968
- A first tool call must not answer from inside a legacy move's staging window by @danielhanchen in #10953
- Take the wall clock out of two backend guards that fail on a loaded runner by @danielhanchen in #10952
- Studio: add configurable chat width by @shimmyshimmer in #10958
- fix: materialize strided LayerNorm inputs and gradients by @MrCapricornLiu in #10675
- Studio: fix unsloth start when port 8888 is already in use by @NilayYadav in #10942
- Studio: a Windows host whose NVIDIA GPU is hidden by CUDA_VISIBLE_DEVICES selects the CUDA bundle, not windows-cpu by @danielhanchen in #10976
- Studio: accept the name field on chat messages by @NilayYadav in #10937
- Keep a passthrough SSE stream alive while llama-server prefills by @danielhanchen in #10911
- Studio: keep a working GPU llama.cpp prebuilt over a CPU-only source fallback, and say so in the footer by @danielhanchen in #10975
- Studio: read the NVIDIA inventory from NVML or the CUDA driver when nvidia-smi cannot answer by @danielhanchen in #10985
- Time the stall window test instead of counting polls by @danielhanchen in #10987
- Say which unsloth_zoo revision Core tested, and warn when it is not main by @danielhanchen in #10988
- Desktop: extend the NVIDIA X11 WebKit fence fix to native packages by @oobabooga in #10964
- Run the chat width presets in CI, and two guards main is currently red on by @danielhanchen in #11001
- Stop the video gate test failing on a rename it should not care about by @danielhanchen in #11003
- Studio: expose image text encoder precision by @shimmyshimmer in #10788
- Studio: show MTP companion download progress by @Imagineer99 in #10243
- Studio: load the user's own Pi extensions and packages in unsloth start pi by @oobabooga in #10971
- Close the partially initialized torch._dynamo window on the diffusion load path by @danielhanchen in #10981
- Studio prebuilt selection: Windows CUDA lines ordered by detected DLLs rather than filtered, portable fallback attempt, keep paths require SM coverage by @danielhanchen in #11006
- Stop committing the two fixture archives that antivirus vendors flag by @danielhanchen in #10979
- Pre-import diffusers in the post-warm worker so the first image load does not by @danielhanchen in #10989
- Studio: download image model assets without loading by @shimmyshimmer in #10789
- fix(amd): turn on PyTorch's fast ROCm attention kernels on import unsloth, and drop the installers' host-wide export by @LeoBorcherding in #8821
- tests: pin the amd/huggingfacenotorch extras and name the audit failure by @LeoBorcherding in #7536
- Linux: index AMD visible-device masks by device, and floor gfx1102/RDNA4 to rocm6.4 by @LeoBorcherding in #9672
- fix(AMD): recognise the RX 6950 XT, 6850M XT and 6550M instead of leaving them on CPU torch by @LeoBorcherding in #10746
- fix(amd): let a pinned torch index carry a package extra, so RDNA1 can reach TheRock by @LeoBorcherding in #9138
- Studio: Make installed Ollama models available through the API by @NilayYadav in #10763
- Studio Linux update: torch repair and the source build read the NVIDIA driver library, a CPU wheel recorded as CUDA is repaired, a satisfied pin keeps the GPU prebuilt by @danielhanchen in #11008
- Fix diffusion load cancellation during construction by @shimmyshimmer in #10780
- Studio: stop iOS Safari zooming into chat text fields by @oobabooga in #10972
- Capture which antivirus product is actually blocking installs, and stop discarding the false-positive submission packets by @danielhanchen in #10986
- Format main to its own pinned hook, so pre-commit autofix can land again by @danielhanchen in #11019
- Measure whether the host property can replace the native console thunk by @danielhanchen in #10984
- Studio: stop a short chat video attachment from taking minutes to prefill by @oobabooga in #10973
- Studio: ask before a chat tool reads or writes outside the sandbox by @danielhanchen in #10907
- Studio installers read the NVIDIA driver library when nvidia-smi cannot answer, and setup.ps1 keeps a working GPU prebuilt over a source build by @danielhanchen in #11007
- Studio runtime keeps the GPU when nvidia-smi cannot answer, and prefers a GPU-capable llama-server beside a CPU build by @danielhanchen in #11005
- Give this work a before-and-after number, and find out the hardening already worked by @danielhanchen in #10996
- fix(studio): keep Studio's auth directory out of the tool loop by @danielhanchen in #10895
- WSL installer: stop running the C# compiler on the user's Windows machine by @danielhanchen in #10978
- fix(studio): keep recipe workers alive when request threads retire by @alkinun in #11021
- Delete the emit apparatus that existed to colour a banner, now that measurement says it was a no-op by @danielhanchen in #10999
- Ask AMSI whether the installer compiles, which is the mechanism #10805 actually reports by @danielhanchen in #10994
- Studio: organize Data settings and make archives searchable by @shimmyshimmer in #10974
- Measure whether a hardening change alters what the installer does, instead of arguing that it does not by @danielhanchen in #10992
- Studio: accept OpenAI video_url content parts on /v1/chat/completions by @Lyxot in #10439
- Studio: add prompt queue controls and composer preferences by @shimmyshimmer in #10980
- Studio: add reasoning budget controls by @alkinun in #7701
- Studio backend tests: settle the real loggers package in conftest for repo-root pytest runs by @deepspace28 in #11028
- fix(amd:audio): decode audio through PyAV when torchcodec installs but cannot load by @LeoBorcherding in #8642
- Studio: re-measure the startup bundle budget, which main is red on by itself by @danielhanchen in #11013
- Unsloth Studio Installer: improve GPU print details (NVIDIA, Intel, AMD) by @LeoBorcherding in #8762
- Recognise a partially initialised torchvision and fix the studiobench ab_plan row by @danielhanchen in #11015
- docs: clarify Docker shell and Windows setup instructions by @Imagineer99 in #11036
- README: mount the Hugging Face cache in the Docker quickstart by @danielhanchen in #11062
- Stop the deps CLI fixture racing another worker for the requirements tree by @danielhanchen in #11063
- Release: sign every shipped PowerShell script and publish digests for the rest by @danielhanchen in #11069
- Windows installer: stop uv splitting a requirements path, and keep the error position in diagnostics by @danielhanchen in #11064
- Docker publish: verify the Studio image env, and stop telling latest users to opt in to CPU by @danielhanchen in #11071
- Answer /status the runtime fields a backend double cannot invent by @danielhanchen in #11076
- Give the launcher signal tests a worker to themselves by @danielhanchen in #11085
- Re-draw a port the OS handed to another test by @danielhanchen in #11086
- Assert the preset sheet subscribes, not how the subscription is spelled by @danielhanchen in #11065
- Studio: keep waiting on a llama-server load that is still reading its model by @oobabooga in #11055
- Studio: move composer settings into More by @shimmyshimmer in #11087
- Studio: fix structured columns in Data Recipes on non-GGUF models by @NilayYadav in #11049
- README: point AMD users at the ROCm image by @danielhanchen in #11066
- docker: give unsloth/unsloth-rocm a Hub page and keep it in sync by @danielhanchen in #11059
- Studio: on low disk, load the largest GGUF quant that fits and show which one loaded by @NilayYadav in #11052
- Studio: organize chat settings and simplify descriptions by @shimmyshimmer in #11088
- Studio: stop charging CPU-mapped input embeddings to the Metal context budget by @oobabooga in #11060
- Studio: send a download over Xet when HTTPS cannot fetch its largest file by @oobabooga in #11061
- tests: route the uv requirements-path pwsh call through the shared runner by @danielhanchen in #11091
- Studio: soften authentication cards and update password setup copy by @shimmyshimmer in #11095
- docker: correct four stale claims on the Hub page by @danielhanchen in #11099
- Keep an abandoned zoom call out of the next test's stub by @danielhanchen in #11090
- Studio: simplify and prioritize chat settings by @shimmyshimmer in #11093
- Redact hf_token and wandb_token in
unsloth train --dry-runoutput by @danielhanchen in #11100 - Studio: stop context checkpoints from filling host RAM on hybrid recurrent models by @oobabooga in #11073
- Studio: stop hiding MCP tools that have a dot or a long name by @NilayYadav in #11051
- Studio: fix Base vs LoRA compare for messages with an image by @NilayYadav in #11047
- Studio: keep the GPU order the user asked for instead of re-emitting it ascending by @LeoBorcherding in #11034
- studio: preserve transcripts and recall audio and image models by @mahiatlinux in #10993
- Windows on ARM: install the native ARM64 CUDA stack on NVIDIA hosts by @danielhanchen in #10282
- docker: stop the toolkit installer reporting a healthy driver as missing by @danielhanchen in #11106
- Studio: keep every turn when training a chat dataset with Alpaca format by @NilayYadav in #11053
- Match stopping criteria separately for each generated sequence by @vineethsaivs in #11039
- Apply Q-GaLore weight decay before the projected update by @vineethsaivs in #10931
- Studio: make the GGUF memory estimate match the compute buffers llama.cpp allocates by @oobabooga in #11043
- Studio: refine queue drag handles and resume icons by @shimmyshimmer in #11113
- Fix the three Backend CI failures on main by @danielhanchen in #11111
- Studio: stop merging the model twice when pushing a merged export to the Hub by @NilayYadav in #11050
- docker: let the quickstart generate the passwords and print them by @danielhanchen in #11109
- Studio: rewrite the guided tour and give every page one by @shimmyshimmer in #11105
- Docker: let UNSLOTH_STUDIO_PORT change Studio's port inside the container by @NilayYadav in #11045
- Keep an exported config's MTP declaration in agreement with the weights by @danielhanchen in #11042
- Pin the win_arm64 scikit-learn to one version so the security audit cannot go red on its own by @danielhanchen in #11112
- Windows on ARM: take the wheelhouse from our own signed release by @danielhanchen in #11108
- Studio: clarify queue options and refine queue styling by @shimmyshimmer in #11114
- Studio: save a training checkpoint when the container is stopped by @NilayYadav in #11044
- Studio: make Thinking and repetition penalty work on messages with an image by @NilayYadav in #11048
- Studio: let the GPUs picker set device order, not just membership by @LeoBorcherding in #11041
- Studio: print the first-boot password when nothing else will show it by @danielhanchen in #11118
- Studio: localize the prompt queue view and align its editor shortcut by @shimmyshimmer in #11117
- Studio: repair CPU torch on an NVIDIA host from the Linux fast path by @danielhanchen in #11127
- Studio: minimal OS sandbox for Python and Terminal tools on Linux and macOS by @danielhanchen in #10526
- feat(studio): consistent SSH restrictions with approved-server allowlist by @Souravrajvi0 in #10642
- Revert "feat(studio): consistent SSH restrictions with approved-server allowlist" by @danielhanchen in #11163
- Repair the six CI checks that are red on main itself by @danielhanchen in #11139
- Let the formatter fixed-point guard start on Windows by @danielhanchen in #11145
- Read every uv and pip resolver flag through one boolish reader by @danielhanchen in #11138
- Read the resident tensor names only where they are used by @danielhanchen in #11159
- Stop two CI guards failing for the machine they ran on by @danielhanchen in #11164
- Studio: keep the Hub token off redirect targets and clear a blank HF_ENDPOINT by @AdamPlatin123 in #11000
- Studio: shrink the resume glyph, trim the queueing hint and round the scroll corner by @shimmyshimmer in #11179
- Studio: report a model reply that finished with nothing in it by @shimmyshimmer in #11185
- Stop a shared embedder setup stranding its model in the next test by @danielhanchen in #11178
- Check the MLX audit cleaned up its own temp file, not the shared temp dir by @danielhanchen in #11181
- Clear every GPU visibility mask the ROCm probe test drives production with by @danielhanchen in #11182
- Run the formatter on the one file main left drifted by @danielhanchen in #11058
- Studio: models.dev catalog for reasoning and image options on other API providers by @NilayYadav in #10957
- Target unfused MoE expert parameters instead of dropping them by @danielhanchen in #11014
- Studio: import ShareGPT chats with the right roles by @NilayYadav in #11149
- Exit with code 130 when unsloth train is stopped with Ctrl+C by @NilayYadav in #11151
- Studio: make UNSLOTH_DISABLE_UPDATE_CHECK also stop the llama.cpp and whisper.cpp checks by @NilayYadav in #11155
- Studio: show disk space in the same GB as model sizes by @NilayYadav in #11150
- Studio: pass search results and documents through to the model on /v1/messages by @NilayYadav in #11152
- Keep the RoPE base frequency on transformers 5, and make triton optional by @danielhanchen in #11037
- Studio: use --reasoning where available and name the compressed-tensors refusal by @danielhanchen in #11072
- Resolve apply_qkv and apply_o defensively, and explain zero patch counts by @danielhanchen in #11038
- Studio backend tests: pin the logical CPU count in the oversubscribed-threads spill test by @danielhanchen in #11120
- Model picker: collapse a single downloaded quant again by @shimmyshimmer in #11190
- Resolve the per layer device through a helper instead of a raw index by @danielhanchen in #11020
- Installers: require x64 Python on Windows on ARM, and respect active conda by @danielhanchen in #11024
- Report the video progress the GPU has actually done by @danielhanchen in #11004
- Studio: reap the llama-server tree on Windows unload, and unblock a dead spawned backend by @danielhanchen in #11022
- Pin every rank of a distributed launch to its own device, not just quantized ones by @danielhanchen in #11129
- Keep every nested RoPE base, and never put a per-label mapping in rope_theta by @danielhanchen in #11192
- Stop the empty-logits sentinel from claiming protocol dunders it cannot honour by @danielhanchen in #11130
- Release: stop publishing standalone signed scripts by @wasimysaid in #11123
- Studio: assert the argv, not the call count, in the shutdown spawn-refusal test by @danielhanchen in #10645
- Studio: official image picks default to the hosted FP8 or INT8 checkpoint by @danielhanchen in #10883
- perf(studio): keep MLX VLM generation on one stream by @Lyxot in #10962
- Studio: serve every image an MLX conversation carries, not just the newest by @Lyxot in #10970
- Studio: do not run Gemma tool call examples written inside code blocks by @NilayYadav in #11153
- Move the Studio MLX pins to mlx 0.32.2 and mlx-vlm 0.7.1 by @Lyxot in #11080
- Diagnose torch and triton version skew at import time by @danielhanchen in #11023
- Take the compile-cache bundle write off the image generation request path by @danielhanchen in #11009
- Fix the cold unsloth.save import, the preview role map and the GPU memory cap by @danielhanchen in #11077
- Studio: keep a reasoning page start below its end by @danielhanchen in #10922
- Define everything Refresh-Environment calls before the PSModulePath test runs it by @danielhanchen in #11194
- Studio: serve an installed MLX checkpoint whose config drops its vision sub-config by @Lyxot in #10977
- Stop a removed torchao class from killing plain LoRA by @danielhanchen in #11168
- Fall back to HTTPS when hf_xet is installed but cannot be imported by @danielhanchen in #11167
- Look for nvidia-smi everywhere it actually is by @danielhanchen in #11119
- Turn the CUDA graph off for MiniMax-H3: measured 1.0018x for 3.93 GB by @danielhanchen in #11175
- Unsloth Studio Installer: hold the install lock as a file as well as a mutex by @danielhanchen in #11094
- Bump the actions group across 1 directory with 10 updates by @dependabot[bot] in #11199
- Desktop: build and ship a native Windows ARM64 installer by @danielhanchen in #11122
- Catch a temporary patch that stops applying instead of only logging it by @danielhanchen in #11198
- Format the two files main is failing its own pre-commit hook on by @danielhanchen in #11203
- Studio: honour an unmeasured context request and price the real attention plan by @danielhanchen in #11025
- Route save_method="lora" to the adapter save instead of the merge by @danielhanchen in #11067
- Installer: recover from and explain an unreadable llama.cpp cache on Windows by @danielhanchen in #10533
- Studio: an AMD owner asking for a precision outright is told the real reason by @danielhanchen in #11032
- Docker: keep the startup health checks off the HTTP proxy by @NilayYadav in #11157
- Docker: stop notebooks from uninstalling the baked packages by @NilayYadav in #11156
- Studio: stop declaring a live backend dead, and keep a crashed worker's stderr by @danielhanchen in #11070
- Studio: judge a local chat model by the transformers 5 modality keys, not text_config by @danielhanchen in #11011
- Baseline the four huggingface_hub 1.32.0 sandbox findings by @danielhanchen in #11206
- Re-run the kwarg-spacing formatter on three files that landed unformatted by @danielhanchen in #11207
- Kaggle GPU harness: an all-[N/A] listing is cannot attribute, not no GPU by @danielhanchen in #10472
- Reject an hf_xet that is only an empty namespace package by @danielhanchen in #11205
- Raise the unsloth_zoo floor to 2026.9.5 now that the compiled-path sentinel fix shipped by @danielhanchen in #11210
New Contributors
- @MrCapricornLiu made their first contribution in #10617
- @BluePlexus made their first contribution in #10677
- @caiotheodoro made their first contribution in #10734
- @apurv-1 made their first contribution in #10685
- @JohannesGezachew made their first contribution in #10857
- @xy200303 made their first contribution in #10797
- @deepspace28 made their first contribution in #10846
- @veriepicc made their first contribution in #10860
- @li-lizhe made their first contribution in #10684
Full Changelog: v0.1.808-beta...v0.1.810-beta