Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
711 commits
Select commit Hold shift + click to select a range
aeb5075
Route dense NemotronH models to the transformers 5.10 tier (#6541)
danielhanchen Jun 22, 2026
2a05426
Auto-install SSM kernels (causal-conv1d, mamba-ssm) for inference loa…
danielhanchen Jun 22, 2026
586262d
Fix grey scroll-fade bands on macOS Safari 27 Beta (#6507)
shimmyshimmer Jun 22, 2026
b92123a
Studio: add Export to GGUF button on finished training runs (#6475)
danielhanchen Jun 22, 2026
08e84b7
Studio: keep code block scrollbars off one-line code (#6474)
wasimysaid Jun 22, 2026
ab2717a
Studio: persistent per-user trust_remote_code approval cache (#6551)
danielhanchen Jun 22, 2026
52c2cf8
Correct wrong negative argparse.BooleanOptionalAction argument name (…
pchemguy Jun 22, 2026
9dbd40e
Reset torch.compile cache poisoned by a stray forward before trainer.…
danielhanchen Jun 22, 2026
040858c
Studio: fix tier detection for models loaded via custom folder path (…
LeoBorcherding Jun 22, 2026
e2e8e5a
Studio: show tool-call progress for large GGUF tool arguments (#6484)
danielhanchen Jun 22, 2026
2ec0b88
Fix recent trainings scope (#6571)
wasimysaid Jun 22, 2026
6254ab3
Studio: accept --not-secure as a back-compat alias for --no-secure (#…
danielhanchen Jun 22, 2026
86d65f3
Add regression tests for the stray-forward compile-cache reset (#6569)
danielhanchen Jun 22, 2026
dbc13f0
Studio: fix Ctrl+C shutdown ordering (installer shell + uvicorn threa…
danielhanchen Jun 22, 2026
1fc8bf5
Add Hugging Face dataset streaming mode to Studio (#4946)
sanatb187 Jun 22, 2026
494e0e6
studio: let users change their password from Settings (#6520)
danielhanchen Jun 22, 2026
007a212
Generalize transformers tier selection by probing AutoConfig (#6550)
danielhanchen Jun 22, 2026
7bd8e64
Studio: honor custom HF_HOME for model download and load (#6510)
shimmyshimmer Jun 22, 2026
3a9fc34
Studio Playwright: snooze update banner before sending (#6576)
danielhanchen Jun 22, 2026
a2423e6
Studio: hide RAG embedder from the On Device list (#6572)
shimmyshimmer Jun 22, 2026
65c8a88
Studio macOS: force anyio<4.14.0 via uv override (#6575)
danielhanchen Jun 22, 2026
ce03232
Fix test isolation: restore sys.modules after the pre-import gate tes…
danielhanchen Jun 22, 2026
0689bd3
Studio: keep model downloads running across navigation and loads (#6573)
shimmyshimmer Jun 22, 2026
c7eaaae
Versioning
danielhanchen Jun 22, 2026
c976174
Studio: correct the anyio<4.14 pin rationale (mixed-install ImportErr…
danielhanchen Jun 22, 2026
7ecbf5a
Use UTF-8 for Python code-execution subprocess I/O (#6489 class) (#6548)
GodlyDonuts Jun 22, 2026
643e13a
Bump install.sh / install.ps1 pin to unsloth>=2026.6.9 (#6580)
danielhanchen Jun 22, 2026
655b0cb
Studio: default Hub Discover scope to all models (#6593)
shimmyshimmer Jun 23, 2026
45c01c0
Studio: model picker search placeholder, Search Hub tooltip, list pol…
shimmyshimmer Jun 23, 2026
18236bf
Studio: refresh chat guided tour for the redesigned model picker (#6597)
shimmyshimmer Jun 23, 2026
e226e0a
CI: fix import-hoist false positive, vision-cache test cwd, llama.cpp…
danielhanchen Jun 23, 2026
bebc93d
fix(studio): handle multimodal list content in inference text paths (…
danielhanchen Jun 23, 2026
7092682
studio/setup.sh: guard empty CUDA arch detection in the source build …
danielhanchen Jun 23, 2026
eae59b2
fix: use EMPTY_LOGITS on the fused-CE not-return_dict path (#2068) (#…
danielhanchen Jun 23, 2026
f74c48e
Fix GRPOTrainer evaluate() crash without prior training (#6523)
danielhanchen Jun 23, 2026
7b208bc
Fix misleading 'only for image models' error for Qwen3-VL when torchv…
danielhanchen Jun 23, 2026
9780cdc
Fix FlashAttention fp32 crash with DoRA (use_dora=True) (#6526)
danielhanchen Jun 23, 2026
ab6a013
[pre-commit.ci] pre-commit autoupdate (#6587)
pre-commit-ci[bot] Jun 23, 2026
af3f29d
Withhold HF_TOKEN from pull_request CI runs (#6600)
danielhanchen Jun 23, 2026
dad11e8
Fix Studio export checkpoint ordering (#6602)
Lyxot Jun 23, 2026
21bdc8f
Studio: treat data-center Blackwell (sm_100/sm_103) as Blackwell in l…
danielhanchen Jun 23, 2026
71e6b18
Studio: fall back to anonymous HF browsing on a malformed token (#6605)
danielhanchen Jun 23, 2026
9776bac
Chat: match reasoning thinking icon to the composer bulb (#6607)
shimmyshimmer Jun 23, 2026
88e451c
Hub: restore Unsloth owner avatar to HF profile picture (#6606)
shimmyshimmer Jun 23, 2026
2193b7f
Studio: scope "Remember settings next time" per GGUF quant and apply …
oobabooga Jun 23, 2026
55c392f
studio: fix sentence-transformers RAG embedder on Windows ROCm (torch…
danielhanchen Jun 23, 2026
7bac461
Remove git blame ignore revs (#6582)
wasimysaid Jun 23, 2026
76cbddb
Studio: allow --secure with --api-only (headless secure API server) a…
danielhanchen Jun 23, 2026
935f6c5
studio: tighten torchao Windows-ROCm comments and test docstrings (#6…
danielhanchen Jun 23, 2026
1ffffc1
Studio: correct anyio<4.14 comments to the real #6483 cause (#6581)
danielhanchen Jun 23, 2026
6866362
studio: report the true reasoning duration and fix Stop for thinking …
danielhanchen Jun 23, 2026
b458e1c
Add HTTPS hint to Studio launch message (#6583)
Imagineer99 Jun 23, 2026
37166ef
Fix Gemma 4 GGUF OpenAI API streams (#6476)
wasimysaid Jun 23, 2026
69d8a57
Studio: lazy-import matplotlib so the server starts when the wheel is…
LeoBorcherding Jun 23, 2026
d94834f
Studio: add sidebar update button with installed-version display (#6545)
dylanschroers Jun 23, 2026
5eb2133
Thread finetune_audio_layers through get_peft_model (Gemma 4 / Gemma …
danielhanchen Jun 23, 2026
a963ec9
Fix CPOTrainer crash with multimodal processors (Gemma 4) (#6522)
danielhanchen Jun 23, 2026
b91cdc8
Fix Qwen3 NaN loss: delegate pad_token repair to shared unsloth_zoo.p…
danielhanchen Jun 23, 2026
61eef65
Harden MLX self-heal install against supply-chain code execution (#6599)
danielhanchen Jun 23, 2026
8aa27f6
Update safe Studio Tauri cargo dependencies (#6612)
wasimysaid Jun 23, 2026
1cc785e
Studio: remove OpenEnv and other unused packages (#6585)
oobabooga Jun 23, 2026
86ec407
Bump vite (#6354)
dependabot[bot] Jun 23, 2026
7dc0857
Fix SyntheticDataKit.chunk_data dropping single-chunk documents (#6595)
vineethsaivs Jun 23, 2026
e3c7d4d
Match IGNORED_TOKENIZER_NAMES case-insensitively (#6620)
vineethsaivs Jun 23, 2026
1237cd4
Installer: don't require cmake/Homebrew on macOS (prebuilt llama.cpp)…
oobabooga Jun 23, 2026
d42256a
Fix construct_chat_template leaking {INPUT}/{OUTPUT} sentinel into th…
vineethsaivs Jun 24, 2026
53c6ccc
Studio: slim the GLM-5.2 thinking menu width (#6631)
shimmyshimmer Jun 24, 2026
75166f2
Studio: confirm saved Hugging Face token with a tick (#6630)
shimmyshimmer Jun 24, 2026
7a25266
Fix _SameTaskStreamingResponse disconnect test bypassing __init__ (#6…
danielhanchen Jun 24, 2026
fad89ae
Clarify Studio --secure hint exposes a public Cloudflare tunnel (#6615)
danielhanchen Jun 24, 2026
d1529b1
Tidy verbose Studio launch messages (#6628)
danielhanchen Jun 24, 2026
9d53656
Make _uv_safe_path space-safe on macOS/Linux (#6503) (#6534)
GodlyDonuts Jun 24, 2026
b964d34
Clarify in README that studio --secure creates a public tunnel (#6632)
danielhanchen Jun 24, 2026
c3beb92
Studio: add Unsloth Docs to the MCP server presets (#6633)
shimmyshimmer Jun 24, 2026
346d96d
Studio: cap GGUF context to unified memory on Apple Silicon (#6622)
oobabooga Jun 24, 2026
0e2f9ce
Studio: group the project export menu by Combined and Per chat (#6637)
shimmyshimmer Jun 24, 2026
61eb9ea
Studio: tighten the sidebar footer spacing and update-card fade (#6641)
shimmyshimmer Jun 24, 2026
8750d86
Studio: keep the sidebar bottom fade in sync when groups collapse (#6…
shimmyshimmer Jun 24, 2026
c7c353d
Pin isolated Node.js installer to committed sha256 digests (#6625)
danielhanchen Jun 24, 2026
e5cf956
Studio: shareable per-checkpoint preview links (#6486)
NilayYadav Jun 24, 2026
bd2438e
Verify DiffusionGemma visual-server binary against approved checksums…
danielhanchen Jun 24, 2026
ab6c9ec
Studio: honor `stream=false` on the GGUF agentic tool path (#6570) (#…
oobabooga Jun 24, 2026
a3954ed
Fix Studio GGUF variant expansion crash (#6636)
Lyxot Jun 24, 2026
f436d20
Installer: make UV_OVERRIDE space-safe on Apple Silicon (#6503) (#6639)
danielhanchen Jun 25, 2026
e25e789
Polish Studio desktop chrome (#6332)
wasimysaid Jun 25, 2026
2aef1a2
Fix Linux AppImage packaging (#6657)
wasimysaid Jun 25, 2026
c72da05
Studio: clean up empty leftover quant folders so they can be deleted …
danielhanchen Jun 25, 2026
e1698e0
Studio: fix misleading "increase max_seq_length" message for train-on…
danielhanchen Jun 25, 2026
54f25bf
Studio: UNSLOTH_NPM_REGISTRY opt-in for corporate npm mirrors (#6491)…
danielhanchen Jun 25, 2026
09852ba
Studio: keep the live progress stream alive during pre-first-step pre…
danielhanchen Jun 25, 2026
4929c5f
Keep pad-named pad_tokens (e.g. <|vision_pad|>); fix Qwen3-Base load …
danielhanchen Jun 25, 2026
1cb04be
Studio: keep the training event pump alive so progress can't silently…
danielhanchen Jun 25, 2026
8ca09b8
Studio: stop leaking the auth token through HTML canvas preview frame…
danielhanchen Jun 25, 2026
a636693
feat: add GPU-aware model filtering and For You section- Add fit filt…
zrva Jun 25, 2026
c873ef0
Studio: prompt variables into prompt editor (#6434)
Imagineer99 Jun 25, 2026
ed5e2a1
Verify linuxdeploy AppImage digest before use in desktop release (#6673)
danielhanchen Jun 26, 2026
80d3434
Studio: require signed capability tokens for /p preview links (#6666)
danielhanchen Jun 26, 2026
1396c01
Fix offline checkpoint load/export: "tokenizer is weirdly not loaded"…
danielhanchen Jun 26, 2026
c86165e
Studio Colab: opt-in shareable Cloudflare tunnel link (#6684)
LeoBorcherding Jun 26, 2026
7f45635
Studio: auto-shut-down an exposed first-run instance if the admin pas…
danielhanchen Jun 26, 2026
a9c8bcf
Fix DDP crash from CPU-resident rotary inv_freq buffer (#6662)
Abdul-Moiz31 Jun 26, 2026
3e43ed7
Patch FalconH1RMSNorm to fix float64 compilation crash on Intel Arc D…
anmolxlight Jun 26, 2026
e9c6364
feat: improve Unsloth Studio chat title generation quality (#6697)
mvanhorn Jun 26, 2026
2ef3941
Studio: harden background consumer loops and streaming paths against …
danielhanchen Jun 26, 2026
b693ed7
fix: wrap unprotected evaluate() calls with robust_evaluate() to hand…
jimdawdy-hub Jun 26, 2026
cb27448
Add GGUF --tensor-parallel CLI option (#6561)
OnePunchMonk Jun 26, 2026
9451aef
studio: return a clean model id from the OpenAI API instead of the lo…
danielhanchen Jun 26, 2026
4a5d41e
fix(install): enable UV_NATIVE_TLS on macOS for corporate TLS-inspect…
Cesarsk Jun 26, 2026
e594e5d
fix: stop faking 8bit load flag (#6708)
Lyxot Jun 26, 2026
b11966b
studio: list the full local model catalog from /v1/models (#6519)
danielhanchen Jun 26, 2026
101de19
Silence torchao _C*.so load-failure WARNING on torch >= 2.11 (#6712)
danielhanchen Jun 27, 2026
1fcd69e
Harden flaky Studio CI: retry VS-hide rename and tolerate same-URL na…
danielhanchen Jun 27, 2026
c8bcacc
Fix fast_inference crash on ABI-broken vLLM: probe compiled extension…
oobabooga Jun 27, 2026
98a01e7
Studio: restore tensor parallelism for vision/mmproj GGUFs (#6659)
danielhanchen Jun 27, 2026
4c72e09
Studio: stop handing CI/user secrets to downloaded llama.cpp binaries…
danielhanchen Jun 27, 2026
0ad814a
Revert "feat: add GPU-aware model filtering and For You section- Add …
danielhanchen Jun 28, 2026
693ab80
Remove unused FalconH1RMSNormGated import (#6728)
danielhanchen Jun 28, 2026
b56d24e
Studio: cascade user message deletion to include assistant reply (#6720)
NilayYadav Jun 28, 2026
20266a5
Fix custom chat templates with a {system_message} placeholder (dead c…
vineethsaivs Jun 29, 2026
677ec0c
Fix gpt-oss detection in save: config.architectures is a list, not a …
vineethsaivs Jun 29, 2026
54b95fb
fix(studio): show local file path tooltip for Hub-tab local models (#…
mvanhorn Jun 29, 2026
2f8521e
Fix compare adapter selection (#6411)
Imagineer99 Jun 29, 2026
0254037
perf(dataprep): cache regex and field lists, fix typos (#6714)
Muhammad-Ikhwan-Fathulloh Jun 29, 2026
755da2f
Speed up Studio desktop startup (#6742)
wasimysaid Jun 29, 2026
07578ea
Fix on-device locations dialog layout (#6743)
Imagineer99 Jun 29, 2026
f80e66e
studio: keep chat header below dialogs (#6745)
Imagineer99 Jun 29, 2026
11469a6
(feat) Add project names to studio training runs (#6512)
shimmyshimmer Jun 29, 2026
1069b28
Studio: name the missing extractor when a Recipes file upload fails (…
shimmyshimmer Jun 29, 2026
f7d509e
fix: remove sidebar update dev override (#6746)
Imagineer99 Jun 29, 2026
220ff5a
fix: CVE-2026-54290 security vulnerability (#6736)
orbisai0security Jun 29, 2026
6acf01f
Fix llama.cpp CMake build detection in save.py (#5957)
ashzak Jun 29, 2026
ba41e79
CI: add PyPI extra-index to CPU torch installs to fix sympy resolutio…
danielhanchen Jun 29, 2026
de3c745
Fix full finetuning precision on V100 / no-bf16 GPUs (#5880)
danielhanchen Jun 29, 2026
27b66b2
Fix outdated triton-xpu 3.7.1 sha256 hashes in intel-gpu-torch2120 ex…
Oscilloscope98 Jun 29, 2026
f62c26e
Fix stale xformers and flash-attn wheel URLs (#4213)
danielhanchen Jun 29, 2026
32f28b2
Studio: keep "Fine-tuned" compare label clear of the floating top rig…
NilayYadav Jun 30, 2026
9369dd4
Add FP8/FP4 compressed export to save_pretrained_merged (#6706)
danielhanchen Jun 30, 2026
43d3caf
Studio: imatrix GGUF option and FP8/NVFP4 compressed export in the ex…
danielhanchen Jun 30, 2026
e8945ca
Whole-document context for RAG chat attachments (#6693)
danielhanchen Jun 30, 2026
0a3e5a3
Studio: quick eject from the model selector (#6654)
shimmyshimmer Jun 30, 2026
b72a8c4
studio: explicit Cloudflare tunnel notice and public-exposure warning…
danielhanchen Jun 30, 2026
7337729
fix(studio/llama_cpp): disable trust_env on the loopback health probe…
Anai-Guo Jun 30, 2026
d915a13
feat(i18n): add Japanese locale support for the Studio UI catalog (#6…
DovahkiinYuzuko Jun 30, 2026
2246a6c
fix: keep LoRA reloads working with PEFT 0.19 (#6748)
rodboev Jun 30, 2026
d0f8d40
studio: allow updating HF models through UI (#5388)
Anish9901 Jun 30, 2026
7120782
Keep the JS-bundle scan check size-agnostic so the baseline does not …
danielhanchen Jul 1, 2026
8cc05ac
Reduce comments across recent fixes (#6776)
danielhanchen Jul 1, 2026
bc69dfa
MLX CI: find llama-cli where save_pretrained_gguf actually installs i…
danielhanchen Jul 1, 2026
0ea727a
Studio RAG: disable trust_env on loopback llama-server httpx clients …
danielhanchen Jul 1, 2026
73d9653
scan_packages: key baseline on matched-code hash so payloads in basel…
danielhanchen Jul 1, 2026
ec4c044
Pin llm-compressor auto-install to a vetted version range (#6778)
danielhanchen Jul 1, 2026
482d797
Fix Windows Studio UTF-8 startup handling (#6614)
Imagineer99 Jul 1, 2026
5211b50
Studio: opt-in OpenAI /v1 model auto-switch and idle keep-warm (#6392)
danielhanchen Jul 1, 2026
c5adb69
Fix GRPO logit scaling when model is wrapped by DDP (#5955)
ftrajkov-amd Jul 2, 2026
d91183d
Fix gpt-oss offload_embedding and generate() kwargs, and guard offloa…
danielhanchen Jul 2, 2026
ac6ba96
Add a fits-on-device filter to the model selects (#6802)
shimmyshimmer Jul 2, 2026
62e9644
Studio RAG: fix RTL/Indic PDF corruption and dropped DOCX tables (#6780)
danielhanchen Jul 2, 2026
4f24b12
Studio: customizable RAG embedding model with HF search, settings tab…
shimmyshimmer Jul 2, 2026
91f4ec7
Studio: self-heal a pre-#6483-fix anyio>=4.14 stuck in existing insta…
Abdul-Moiz31 Jul 2, 2026
22cd26f
feat: Implementation of the Portuguese (Brazil) language and VRAM/RAM…
Dspofu Jul 2, 2026
d33a7a7
Fix: skip fp16/bf16 validation for full finetuning in RL trainers (#6…
InfoSage05 Jul 2, 2026
2bfeb47
studio/frontend: drop developer-only /grid-test route (#5662)
danielhanchen Jul 2, 2026
73e8245
[Studio] Add --with-llama-cpp-dir installer flag to reuse a local lla…
LeoBorcherding Jul 2, 2026
d918245
Add MLX-aware public Unsloth trainer API (#6462)
Lyxot Jul 2, 2026
abdc968
report a complete load once llama-server is healthy (#6790)
hakanbaysal Jul 3, 2026
9fd4a50
fast_generate: clear error for vLLM-style inputs when fast_inference=…
danielhanchen Jul 3, 2026
b8400f4
CLI: Rename unsloth connect to unsloth start (#6613)
NilayYadav Jul 3, 2026
308ea5a
Tool-call healing (default on) and opt-in nudging for the client-tool…
danielhanchen Jul 3, 2026
026141a
Studio: multi-select export formats, portable FP8/INT8, GGUF LoRA, an…
danielhanchen Jul 3, 2026
fbb5b09
Studio: flush passthrough stream headers before upstream prefill stal…
rodboev Jul 3, 2026
2b06616
Fix TrainingArguments silently disabling unsloth gradient checkpointi…
oobabooga Jul 3, 2026
9c2eacc
Studio: reserve CUDA context and mmproj/MTP soft overhead in the GGUF…
danielhanchen Jul 3, 2026
01f7e14
Fix Studio custom folders on Linux external drives (#6799)
ramisworld Jul 3, 2026
c356427
Guard Windows ROCm torchao override skip (#6837)
InfoSage05 Jul 3, 2026
64f6526
Fix export-time trust_remote_code bypass in FP8/INT8/GGUF-LoRA export…
danielhanchen Jul 5, 2026
53a071c
Harden Windows Pester install against missing PSGallery (#6892)
danielhanchen Jul 6, 2026
cb6737c
Auto Xet to HTTP download fallback in from_pretrained; share Studio's…
danielhanchen Jul 6, 2026
9407d49
GRPO: sequence packing for the no-grad old/ref logp path (default-on)…
danielhanchen Jul 6, 2026
08e133c
Add PrefixGrouper for GRPO: dedup the shared prompt across a group's …
danielhanchen Jul 6, 2026
22bd86e
Handle odd shapes and non-float scales in FP8BlockQuantLinear (#6848)
danielhanchen Jul 6, 2026
7cc1752
Scope MoE expert LoRA detection to actual MLP projection targets (#6849)
danielhanchen Jul 6, 2026
c520662
Honor an explicit sdpa or flex_attention request when flash is disabl…
danielhanchen Jul 6, 2026
c7b8666
Auto-enable grouped MoE on loaded / PEFT'd models via loader hook (#6…
danielhanchen Jul 6, 2026
95a73f0
Honor explicit load_in_16bit for local -bf16 directories (#6726)
danielhanchen Jul 6, 2026
efcaffb
Sync FORCE_FLOAT32 fallback with unsloth-zoo (gemma4, glm4_moe, qwen3…
danielhanchen Jul 6, 2026
cf4906d
Note bundled flash-linear-attention kernels for gated-deltanet models…
danielhanchen Jul 6, 2026
487b420
CI: pin lockfile-audit actions to commit SHAs (#6902)
anxkhn Jul 6, 2026
f4d1dc5
fix(fp8): use int64 offsets in weight_dequant_kernel (#6884)
anxkhn Jul 6, 2026
c44d94f
fix: map None quant method to q8_0 before lowercasing in GGUF export …
anxkhn Jul 6, 2026
cc99aab
fix: correct class name in SyntheticDataKit.chunk_data guard message …
anxkhn Jul 6, 2026
46e2cf5
studio: label RAM and VRAM readouts as GiB not GB (#6895)
danielhanchen Jul 6, 2026
2fada48
Fix llama3 RoPE scaling dropped on transformers v5 (#6907)
danielhanchen Jul 6, 2026
cb9d902
Add the second blank line before _fix_rope_inv_freq (#6910)
danielhanchen Jul 6, 2026
f0a5c52
studio: tool calling + healing parity for Llama-3, Mistral, Gemma 4 o…
danielhanchen Jul 6, 2026
f38672d
Studio: stop chat generation on the assistant-turn-end token (fixes Q…
danielhanchen Jul 6, 2026
e9f49c6
studio: deterministic backend tool-calling wiring test (#6836)
danielhanchen Jul 6, 2026
e9ea45b
Studio: coerce tool_call arguments to dict before chat templating (fi…
danielhanchen Jul 6, 2026
eb1ef44
Studio: Gemma tool-call streaming follow-ups + nested-XML escape fix …
danielhanchen Jul 6, 2026
c00c1e7
studio: tool calling for DeepSeek (R1/V3/V3.1), GLM 4.x, Kimi K2 on s…
danielhanchen Jul 6, 2026
233949c
scan_packages: baseline transitive-dep drift in the supply-chain scan…
danielhanchen Jul 7, 2026
f109e7f
Studio: parse Mistral [TOOL_CALLS] and rehearsal tool-call shapes (#5…
danielhanchen Jul 7, 2026
c2a7b78
Studio: exclude mlx-lm 0.31.3 (broke gemma4/qwen3_5 QK-norm load on A…
danielhanchen Jul 7, 2026
9dabe96
Studio chat: tool-call nudging on by default (API stays opt-in) (#6883)
danielhanchen Jul 7, 2026
8ba46b5
Studio: close switch/cancel races during model load (#6918)
danielhanchen Jul 7, 2026
46ab683
Studio: client-tool passthrough healing for safetensors and MLX (#6870)
danielhanchen Jul 7, 2026
3506371
Studio: keep the nudge wiring test collectable without the unsloth st…
danielhanchen Jul 7, 2026
9674e88
Studio: serialize the compare-mode dispatcher lifecycle to fix a star…
danielhanchen Jul 7, 2026
5608081
Studio: apply presence_penalty on the safetensors and MLX inference p…
danielhanchen Jul 7, 2026
af93868
Fix repeated base model downloads across checkpoint exports (#6896)
shimmyshimmer Jul 7, 2026
08226c2
Studio: fix torch CUDA undefined-symbol errors from a conflicting LD_…
danielhanchen Jul 7, 2026
69f8e0b
Clear stale yolo approval state on no-launch reruns (#6868)
danielhanchen Jul 7, 2026
296cacb
ROCm-on-WSL: support discrete Radeon (RDNA 3/4) in WSL, not just Stri…
LeoBorcherding Jul 7, 2026
bdb958e
Guard RoPE scaling against the transformers v5 buffer blank; honor ex…
danielhanchen Jul 7, 2026
4145037
Run the malware gate on the RAG embedding model before it loads (#6887)
danielhanchen Jul 7, 2026
d79495d
Add RDNA 2/3/4 ROCm routing tests via a CPU-only torch spoof (#6935)
danielhanchen Jul 7, 2026
59977f9
GRPO: default router_aux_loss_coef to 0 on TRL >= 1.7.0 (#6938)
danielhanchen Jul 7, 2026
411c4d1
Add DeepSeek-V4-Flash-GGUF to Studio with none/high/max reasoning (#6…
danielhanchen Jul 7, 2026
10d8f98
Versioning
danielhanchen Jul 7, 2026
ba450b4
Studio: add assistant response details panel (#6842)
Etherll Jul 7, 2026
8efcc17
Studio: account for DeepSeek-V4 compute buffer in context auto-fit (#…
danielhanchen Jul 7, 2026
37075c5
Bump install.sh / install.ps1 pin to unsloth>=2026.7.1 (#6943)
danielhanchen Jul 7, 2026
07ecdb3
Sort chat recents by last activity (#6844)
NilayYadav Jul 7, 2026
93c9d6d
Studio: render \[ \] and \( \) LaTeX delimiters in chat (#6914)
oobabooga Jul 7, 2026
304b8ec
fix: match qwen3-thinking double-newline in train_on_responses_only r…
InfoSage05 Jul 7, 2026
a9db53e
Studio: stream reasoning tokens in the tool-loop generator (fixes Dee…
oobabooga Jul 7, 2026
01b8085
Create ossf.yml (#6952)
danielhanchen Jul 8, 2026
49d1fb3
Speed up Studio startup path (#6899)
wasimysaid Jul 8, 2026
e7e6a0f
Polish assistant message actions menu (#6962)
shimmyshimmer Jul 8, 2026
7f9964f
Move New badge to System settings tab (#6963)
shimmyshimmer Jul 8, 2026
393d7e9
Fix opencode Unsloth provider selection (#6906)
Imagineer99 Jul 8, 2026
baacbd0
Fix Hermes install hint on Windows (#6903)
Imagineer99 Jul 8, 2026
a113f89
Studio: heal DiffusionGemma tool calls into structured tool_calls (#6…
oobabooga Jul 8, 2026
df6b5a5
Fix case-variant model matching and GGUF cache reuse in unsloth start…
Imagineer99 Jul 8, 2026
f1a2621
Studio: show Hugging Face address on hover for Hub and online model r…
danielhanchen Jul 8, 2026
de60a3a
Studio: fix currency and indentation edge cases in LaTeX rendering (#…
danielhanchen Jul 8, 2026
38dacb8
Add MLX backend support for CLI unsloth train (#6709)
Lyxot Jul 8, 2026
2a6abe2
feat(cli): support MLX distributed inference (#6845)
Lyxot Jul 8, 2026
934f879
feat(mlx): route trainer callbacks (#6929)
Lyxot Jul 8, 2026
07c8bbb
(GRPO) Fix PEFT replacement for TRL >= 1.7.0, add missing compute_aux…
marcandrelarochelle Jul 8, 2026
0e1ed88
version-compat CI: fake CPU training runs for SFT/GRPO/DPO (#6965)
danielhanchen Jul 8, 2026
6ef0936
Fix OpenClaw start default to local TUI (#6937)
Imagineer99 Jul 8, 2026
e86b787
feat: detect installed coding agent CLIs in Studio settings (#6909)
ErenAta16 Jul 8, 2026
41dd95e
Studio: don't pin transformers before the training worker activates t…
danielhanchen Jul 8, 2026
fcb1152
Studio: source CPU llama.cpp prebuilts from unslothai/llama.cpp (#6311)
oobabooga Jul 8, 2026
d0c8d55
fix(studio/hub): apply repo_id length limit per segment, not whole st…
Anai-Guo Jul 8, 2026
62a6eb2
MoE LoRA: auto-target per-expert Linear experts (gpt-oss 4bit) instea…
danielhanchen Jul 8, 2026
acd4492
Studio: allow CPU-only DiffusionGemma by granting the diffusion runne…
danielhanchen Jul 8, 2026
03cbe21
Studio: fix flash-attn and torchao install on Blackwell (sm_100+) GPU…
ThomasEricB Jul 8, 2026
ba50254
Studio: mark CPU-only DiffusionGemma as non-GPU-resident for training…
danielhanchen Jul 8, 2026
8cb3bdf
Merge commit 'ba50254ec0451e1c125ddc57be46eebe33783f62' into pr-6979-ci
danielhanchen Jul 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 11 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,2 +1,13 @@
# Normalize Python files to LF line endings
*.py text eol=lf

# Always check out shell scripts with LF endings. Without this rule a Windows
# clone (core.autocrlf=true) rewrites them to CRLF, and the trailing \r breaks
# them when run in WSL/Linux (e.g. `set -e` -> "set: Illegal option -").
*.sh text eol=lf

# Normalize Studio frontend sources to LF. Scoped to the frontend tree (rather
# than repo-wide *.ts/*.tsx/... rules) so the policy can't force LF on files
# elsewhere. text=auto lets Git detect and leave binary assets (logos, fonts)
# untouched while text files (.ts/.tsx/.json/.html/.svg/...) are stored as LF.
studio/frontend/** text=auto eol=lf
20 changes: 10 additions & 10 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
/unsloth/models/rl_replacements.py @Datta0 @pluesclues @danielhanchen
/unsloth/trainer.py @danielhanchen
/unsloth/models/sentence_transformer.py @Etherll @danielhanchen
/unsloth/save.py @rolandtannous @danielhanchen
/unsloth/save.py @danielhanchen
/unsloth/tokenizer_utils.py @mmathew23 @danielhanchen
/unsloth/chat_templates.py @rolandtannous @danielhanchen
/unsloth/ollama_template_mappers.py @rolandtannous @danielhanchen
/unsloth/chat_templates.py @danielhanchen
/unsloth/ollama_template_mappers.py @danielhanchen
/unsloth/kernels/moe/*.py @Datta0
/unsloth/import_fixes.py @danielhanchen
/unsloth/device_type.py @danielhanchen
Expand Down Expand Up @@ -45,14 +45,14 @@
/unsloth/utils/hf_hub.py @mmathew23
/unsloth/utils/packing.py @mmathew23

/cli/ @rolandtannous @Manan17
/studio/frontend/ @Shine1i @rolandtannous @Manan17
/cli/ @Manan17
/studio/frontend/ @Shine1i @Manan17
/studio/frontend/public/ @Shine1i
/studio/backend/ @rolandtannous
/studio/backend/core/data_recipe/ @rolandtannous
/studio/backend/tests/ @rolandtannous @danielhanchen
/tests/ @rolandtannous @danielhanchen
/scripts/ @rolandtannous @danielhanchen
/studio/backend/
/studio/backend/core/data_recipe/
/studio/backend/tests/ @danielhanchen
/tests/ @danielhanchen
/scripts/ @danielhanchen

# Snapshot data for the notebook linter / Colab oracle. Drift in these
# files changes the pin floor for every Unsloth notebook, so refreshes
Expand Down
534 changes: 534 additions & 0 deletions .github/scripts/agent-guides-drive.sh

Large diffs are not rendered by default.

108 changes: 108 additions & 0 deletions .github/scripts/agent-guides-install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
#!/usr/bin/env bash
# SPDX-License-Identifier: AGPL-3.0-only
# Copyright 2026-present the Unsloth AI Inc. team. All rights reserved.
#
# Install one coding-agent CLI for the Local Agent Guides CI. Isolated as
# failure class (b) "agent package install failed": npm/curl flakiness here
# is the single biggest source of false reds, so installs retry with
# backoff and the only ::error:: this script can emit is class (b). The
# install recipes mirror the install_hint strings in
# unsloth_cli/commands/start.py at HEAD.
#
# Usage: agent-guides-install.sh <agent>
# agent in: claude codex hermes openclaw opencode pi
set -uo pipefail

AGENT="${1:?usage: agent-guides-install.sh <agent>}"
mkdir -p logs
LOG="logs/install-${AGENT}.log"

install_fail() {
echo "::error::[agent install failed] agent=${AGENT}: $* (class (b): the agent CLI did not install; not a server or guide problem)." >&2
echo "---- tail $LOG ----" >&2
tail -60 "$LOG" 2>/dev/null || true
exit 1
}

# npm registry flakiness is common in CI; retry 3x with linear backoff.
# Extra npm flags may precede the package (e.g. npm_retry --ignore-scripts pkg).
npm_retry() {
local i
for i in 1 2 3; do
if npm install -g "$@" >> "$LOG" 2>&1; then
return 0
fi
echo "[install] npm install -g $* attempt $i failed; backing off $((i * 10))s" | tee -a "$LOG"
sleep "$((i * 10))"
done
return 1
}

# curl|bash installers, retried at the curl layer. We download to a temp file
# first and only execute on a fully successful fetch, so a truncated download
# (network hiccup mid-stream) can never run a half-written installer.
curl_bash() {
local url="$1"; shift
local i tmp
tmp="$(mktemp)"
for i in 1 2 3; do
if curl -fsSL --retry 3 --retry-delay 5 "$url" -o "$tmp" 2>>"$LOG" \
&& bash "$tmp" "$@" >> "$LOG" 2>&1; then
rm -f "$tmp"
return 0
fi
echo "[install] curl|bash $url attempt $i failed; backing off $((i * 10))s" | tee -a "$LOG"
sleep "$((i * 10))"
done
rm -f "$tmp"
return 1
}

echo "[install] agent=$AGENT (log=$LOG)"
case "$AGENT" in
claude)
# start.py install_hint: curl -fsSL https://claude.ai/install.sh | bash
curl_bash "https://claude.ai/install.sh" || install_fail "claude installer failed"
# The installer drops the binary under ~/.local/bin.
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
;;
codex)
# start.py install_hint: npm install -g @openai/codex
npm_retry "@openai/codex" || install_fail "npm install -g @openai/codex failed"
;;
opencode)
# start.py install_hint: npm install -g opencode-ai
npm_retry "opencode-ai" || install_fail "npm install -g opencode-ai failed"
;;
openclaw)
# start.py install_hint: curl -fsSL https://openclaw.ai/install.sh | bash
# npm is the more deterministic path in CI and matches the agent's docs;
# fall back to the start.py curl installer if the npm tag is missing.
if ! npm_retry "openclaw@latest"; then
curl_bash "https://openclaw.ai/install.sh" || install_fail "openclaw install failed (npm + curl)"
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
fi
;;
hermes)
# start.py install_hint:
# curl -fsSL .../NousResearch/hermes-agent/main/scripts/install.sh | bash
curl_bash "https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh" \
--non-interactive --skip-setup --skip-browser --no-skills \
|| install_fail "hermes installer failed"
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
;;
pi)
# start.py install_hint: npm install -g --ignore-scripts @earendil-works/pi-coding-agent
# (--ignore-scripts matches Pi's documented recipe; exercising the exact hint
# catches guide drift). The CLI moved from the now-deprecated @mariozechner
# scope to @earendil-works (the old scope is frozen, so installing it would
# test a stale Pi against the API).
npm_retry --ignore-scripts "@earendil-works/pi-coding-agent" \
|| install_fail "npm install -g --ignore-scripts @earendil-works/pi-coding-agent failed"
;;
*)
install_fail "unknown agent '$AGENT'"
;;
esac

echo "[install] OK for $AGENT"
57 changes: 57 additions & 0 deletions .github/scripts/assert-llama-loads.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#!/usr/bin/env bash
# SPDX-License-Identifier: AGPL-3.0-only
# Copyright 2026-present the Unsloth AI Inc. team. All rights reserved.
#
# Assert Studio installed a llama.cpp that loads and runs on THIS macOS. Tests
# the contract that matters (binaries load and their minimum-OS is <= this host)
# instead of the old "did install.sh fall back to a source build?" grep, since a
# source build with a correct deployment target is a valid outcome.
set -uo pipefail

UNSLOTH_HOME="${STUDIO_HOME:-$HOME/.unsloth}"
LLAMA_DIR="${LLAMA_CPP_DIR:-$UNSLOTH_HOME/llama.cpp}"
BIN_DIR="$LLAMA_DIR/build/bin"

fail() {
echo "::error::$*"
if [ -f logs/install.log ]; then
echo "---- install.log (llama.cpp lines) ----"
grep -E "llama-prebuilt|llama\.cpp|macos prebuilt|falling back" logs/install.log | tail -80 || true
fi
exit 1
}

SERVER="$(find "$LLAMA_DIR" -type f -name 'llama-server' 2>/dev/null | head -1)"
QUANT="$(find "$LLAMA_DIR" -type f -name 'llama-quantize' 2>/dev/null | head -1)"
[ -n "$SERVER" ] || fail "llama-server not found under $LLAMA_DIR after install"
[ -n "$QUANT" ] || fail "llama-quantize not found under $LLAMA_DIR after install"

HOST_VER="$(sw_vers -productVersion 2>/dev/null || echo '0')"
HOST_MAJOR="${HOST_VER%%.*}"

# Static minimum-OS check on every Mach-O we ship. vtool ships with the Xcode
# command line tools, which GitHub macOS runners always have; if it is somehow
# missing we skip the static check and rely on the runtime launch below.
if command -v vtool >/dev/null 2>&1; then
while IFS= read -r macho; do
[ -n "$macho" ] || continue
minos="$(vtool -show-build "$macho" 2>/dev/null | awk '/minos/{print $2; exit}')"
[ -n "$minos" ] || continue
min_major="${minos%%.*}"
if [ "$min_major" -gt "$HOST_MAJOR" ] 2>/dev/null; then
fail "$(basename "$macho") is built for macOS $minos but this runner is macOS $HOST_VER (prebuilt is newer than the host)"
fi
done < <(find "$BIN_DIR" -type f \( -name '*.dylib' -o -name 'llama-server' -o -name 'llama-quantize' \) 2>/dev/null)
fi

# Runtime launch: --version forces dyld to load every linked dylib (including
# libggml-metal.dylib). A missing Metal symbol or too-new binary fails here.
if ! "$SERVER" --version >/tmp/llama-server-version.txt 2>&1; then
echo "---- llama-server --version output ----"
cat /tmp/llama-server-version.txt || true
fail "llama-server failed to launch on macOS $HOST_VER (dyld load / symbol error)"
fi

echo "llama.cpp load validation passed on macOS $HOST_VER"
echo " server: $SERVER"
sed -n '1,4p' /tmp/llama-server-version.txt 2>/dev/null || true
Loading
Loading