Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1003 commits
Select commit Hold shift + click to select a range
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
03cbe21
Studio: fix flash-attn and torchao install on Blackwell (sm_100+) GPU…
ThomasEricB Jul 8, 2026
38ea267
Versioning
danielhanchen Jul 8, 2026
3d41e58
Add has_blackwell_gpu to the mlx worker test's wheel_utils stub (#6980)
danielhanchen Jul 8, 2026
116ce48
Studio: allow CPU-only DiffusionGemma by granting the diffusion runne…
danielhanchen Jul 8, 2026
1a274c4
Bump install.sh / install.ps1 pins to unsloth>=2026.7.2 and unsloth-z…
danielhanchen Jul 8, 2026
5c2e536
Studio: render thinking blocks for safetensors inference with prefill…
shimmyshimmer Jul 8, 2026
7a9fb44
Remove API menu new badge (#6983)
shimmyshimmer Jul 8, 2026
92c3e48
Fix BAD_MAPPINGS not redirecting the -unsloth-bnb-4bit dynamic quants…
vineethsaivs Jul 8, 2026
dc4618c
Fix duplicate unsloth/gemma-2b-bnb-4bit mapper key routing the base 4…
vineethsaivs Jul 8, 2026
85a068c
Fix to_sharegpt optional block rendering "None" for missing extra col…
vineethsaivs Jul 8, 2026
81f789b
Guard FP8 Triton launches with tensor device context (#6888)
ramisworld Jul 8, 2026
3b73cd8
Fix per-block ID collisions and add block cleanup for unstructured up…
NilayYadav Jul 9, 2026
1b82521
Stabilize floating monitor drag (#6984)
shimmyshimmer Jul 9, 2026
8205d4c
Retry the Studio UI shutdown re-login on transient goto timeout (#7027)
danielhanchen Jul 9, 2026
5e43c62
Fix FastSentenceTransformer Qwen embedding preprocessing (#6939)
Etherll Jul 9, 2026
6d674e5
unsloth start: warn before running an agent's remote installer (#7024)
danielhanchen Jul 9, 2026
0d4bd50
Restore process-global torch.compile config on torch 2.12 so gradient…
danielhanchen Jul 9, 2026
b509d47
Silence torch._check_is_size FutureWarning and shim it if torch remov…
danielhanchen Jul 9, 2026
c1e06e9
unsloth start: add --persist to keep and reopen agent sessions (#7014)
danielhanchen Jul 9, 2026
eb775d3
Studio /v1/messages: accept thinking and unknown content blocks (#7017)
danielhanchen Jul 9, 2026
3502335
Studio: add Vulkan llama.cpp support (#5819)
oobabooga Jul 9, 2026
216a1fa
Fix Windows installer torch index override (#6972)
alkinun Jul 9, 2026
cd9d251
Fix fast inference crash on compressed-tensors FP8 models (#7025)
danielhanchen Jul 9, 2026
534c877
Keep native RoPE scaling when extending context; carry rope_theta for…
danielhanchen Jul 9, 2026
b5dca66
scripts: refresh scan_packages allowlist baseline (#7032)
danielhanchen Jul 9, 2026
fb5dc91
Studio: remove dead direct_linux_release_plan path (#7030)
danielhanchen Jul 9, 2026
d4fbc81
Restore dropped FP8 weight_scale_inv tensors on load (#6978)
danielhanchen Jul 9, 2026
b5aef63
Studio: resolve the repo-root MTP drafter after the MTP/ GGUF rename …
danielhanchen Jul 9, 2026
6a9b77e
Studio: harden OpenAI-compatible GGUF streaming (#6950)
Apoze Jul 9, 2026
86602a5
Studio: auto-load last used local model (#6966)
alkinun Jul 9, 2026
b0b8aea
Clarify in README that -H 0.0.0.0 starts a public Cloudflare tunnel (…
oobabooga Jul 10, 2026
fbcd3fa
CI: retry transient HTTP timeouts in Studio smoke probes (#7052)
danielhanchen Jul 10, 2026
33119c9
fix: guard remove_special_tokens against tokenizers without a BOS tok…
vineethsaivs Jul 10, 2026
fef37cb
Studio: queue local GGUF OpenAI-compatible requests before llama-serv…
Apoze Jul 10, 2026
7bfa209
Studio: hint at Model auto-switch in the OpenAI "No model loaded" 400…
oobabooga Jul 10, 2026
d105bd7
Studio: detect Windows Intel GPUs via the registry before WMI (#7064)
oobabooga Jul 10, 2026
c3feac6
Studio: route lfm2_moe (LFM2-8B-A1B) to transformers 5.3.0 (#7040)
danielhanchen Jul 11, 2026
97161c8
Studio: route models by CONFIG_MAPPING_NAMES instead of hardcoded tab…
danielhanchen Jul 11, 2026
6412efd
Studio: auto-detect completion masking markers, stop silent full-sequ…
danielhanchen Jul 11, 2026
9fa6fd4
scripts: refresh scan_packages allowlist baseline (#7078)
danielhanchen Jul 11, 2026
f899834
DeepSeek-V4: eager attention and trainable FP8 grouped experts (#7042)
danielhanchen Jul 12, 2026
275bad1
Studio: fix the manual response-template markers that never match the…
danielhanchen Jul 12, 2026
935474c
Fix SyntheticDataKit.chunk_data emitting chunks over max_tokens (#7073)
winklemad Jul 12, 2026
2a22da9
Studio: startup loading banner and mute the benign bitsandbytes ROCm …
danielhanchen Jul 13, 2026
ca979e9
Studio: add UNSLOTH_SKIP_AUTOSTART installer flag (#7093)
danielhanchen Jul 13, 2026
9e77c1e
Studio: remove AGENTS.md and CLAUDE.md from install artifacts (#7096)
danielhanchen Jul 13, 2026
c570180
Tighten Studio instruction-file cleanup boundaries (#7097)
danielhanchen Jul 13, 2026
cc85992
Fix Studio user-message overflow for long unbroken text (#7100)
Lyxot Jul 13, 2026
2573dbd
fix(studio): use writable recipe artifact path (#7044)
Lyxot Jul 13, 2026
a337c72
Fix Studio auto-titles for reasoning models (#7098)
Lyxot Jul 13, 2026
85f5292
Studio: resync model state after a llama.cpp update unloads it (#6998)
oobabooga Jul 13, 2026
f60b982
Studio: Fix torch_dtype deprecation warning on startup and ASR load (…
oobabooga Jul 13, 2026
76d7088
Studio: Show Run button for downloaded non-GGUF models in the Model H…
oobabooga Jul 13, 2026
014d08c
Studio: install torchao Windows ROCm stub in the inference worker (#7…
oobabooga Jul 13, 2026
a5eb10a
Studio: Add rename to project chat rows (#7005)
oobabooga Jul 13, 2026
ed42702
Probe xformers support on sm_120 instead of disabling it by version (…
oobabooga Jul 14, 2026
fea7d9b
Studio: render image content returned by MCP tools (#7081)
NilayYadav Jul 14, 2026
6e375a5
Studio: add French, German, Spanish, Hindi, Arabic, Russian and Korea…
shimmyshimmer Jul 14, 2026
744b59f
scan_packages: baseline sentencepiece dup2 finding after upstream rei…
danielhanchen Jul 14, 2026
6011551
Studio: persistent stdio MCP sessions so server state survives across…
NilayYadav Jul 14, 2026
2f3eae9
Studio: resolve llama.cpp prebuilts via the release-assets CDN to avo…
danielhanchen Jul 14, 2026
c80e7d3
fix(studio): prevent auth monitor reload loop (#7118)
Lyxot Jul 14, 2026
5de6689
Studio: make Stop interrupt a llama.cpp generation stalled mid-stream…
oobabooga Jul 14, 2026
bc23135
Unsloth: appearance palettes, customization options, and control rest…
shimmyshimmer Jul 14, 2026
1e0d5ec
Studio: pin llama.cpp update apply to the release the banner offered …
oobabooga Jul 14, 2026
eb31d1e
Studio: fix the permanent GGUF "update available" on no-symlink cache…
gaurav0107 Jul 14, 2026
bb80602
Fix S3 tab flashing on reload (#7106)
NilayYadav Jul 14, 2026
3b23589
Fix DeepScaleR-1.5B mapper entry pointing its 16bit repo at DeepHerme…
anxkhn Jul 14, 2026
387b2f2
fix(dataprep): guard smart_chunk_text against stride >= chunk_size (#…
anxkhn Jul 15, 2026
2b52da9
Fix Hub offline status (#7129)
NilayYadav Jul 15, 2026
f9aa818
fix: name unsloth_vllm_standby parameter in vLLM standby error (#7089)
anxkhn Jul 15, 2026
dc65638
Studio: expose Windows drive roots in the folder browser (#7082)
gaurav0107 Jul 15, 2026
67339b1
Studio CI: make tool-calling SSE probes resilient to transport stalls…
danielhanchen Jul 15, 2026
4beb0a3
Studio: force-terminate a stuck training stop after a grace period (#…
danielhanchen Jul 15, 2026
14d0e85
fix(studio): recover MLX VLM image prompts (#7094)
Lyxot Jul 15, 2026
3eb3259
fix(install): fail non-tauri installer errors (#7123)
ShiroKSH Jul 15, 2026
ee73bcb
Fix bare except clauses and remove duplicate MAX_FUSED_SIZE definitio…
lxcxjxhx Jul 15, 2026
d809433
Studio: scope the seeded bootstrap password auto-fill to loopback cli…
oobabooga Jul 15, 2026
8cfd1a2
fix: single-pass GGUF export for directly convertible outtypes in sav…
dylanschroers Jul 15, 2026
815f242
Studio: offer the latest transformers release for brand-new architect…
danielhanchen Jul 15, 2026
1bf3509
Fix agent workspace isolation and Hermes one-shot resume (#7103)
wasimysaid Jul 15, 2026
e1e3841
Studio: permission levels for chat tool calls (Ask, Approve for me, O…
shimmyshimmer Jul 15, 2026
91a0df9
Studio: make the Cloudflare tunnel opt-in (off by default) (#7046)
LeoBorcherding Jul 15, 2026
5531347
Studio: honor the 'none' gradient checkpointing option in training (#…
oobabooga Jul 15, 2026
162cf38
Studio: remove the edge fades appearance setting (#7143)
shimmyshimmer Jul 15, 2026
a6aa4ff
Studio: quiet noisy logs, log real progress, and speed up Windows/mac…
danielhanchen Jul 15, 2026
d76953f
Show concise NVFP4 inference errors (#7145)
shimmyshimmer Jul 15, 2026
300b5f9
Fix Studio toast close-button positioning (#7142)
shimmyshimmer Jul 15, 2026
9de8488
Studio: add Voice settings tab (dictation, dictionary, read aloud) (#…
shimmyshimmer Jul 15, 2026
73af334
Studio: stream live tool output with SSE heartbeats, fix web page ext…
danielhanchen Jul 15, 2026
c0b16b9
Studio: fix permission composer layout and Hub feed icons (#7148)
shimmyshimmer Jul 15, 2026
c5ae208
Compact thinking control in narrow composers (#7150)
shimmyshimmer Jul 15, 2026
770f92e
Studio: reject binary web_search fetches instead of decoding them int…
oobabooga Jul 15, 2026
4cf1593
Studio: fix duplicate response model labels and hover (#7049)
Etherll Jul 15, 2026
a53aae0
Versioning
danielhanchen Jul 15, 2026
85b49ee
Studio: Inkling support fixes (#7153)
danielhanchen Jul 15, 2026
1cc98b7
Bump install.sh / install.ps1 pin to unsloth>=2026.7.3 (#7155)
danielhanchen Jul 15, 2026
c2762f7
fix(dataprep): smart_chunk_text single-chunk path leaks internal tens…
chuenchen309 Jul 16, 2026
1b3d728
Fix Settings layout overflow (#7167)
shimmyshimmer Jul 16, 2026
fb7381f
Keep nested dropdown menus on screen (#7168)
shimmyshimmer Jul 16, 2026
01e9230
Fix DeepSeek reasoning test shim (#7169)
shimmyshimmer Jul 16, 2026
26facee
Harden desktop release token permissions (#7172)
wasimysaid Jul 16, 2026
aad11f4
Studio: clickable sidebar settings cog, long name truncation, Canvas …
shimmyshimmer Jul 16, 2026
e3674d6
CI: opt tool-calling smoke tests out of the chat tool approval gate (…
danielhanchen Jul 16, 2026
030f127
Fix Inkling reasoning-effort coercion for duck-typed engine stand-ins…
danielhanchen Jul 16, 2026
3be4907
fix config cards clipping content at narrow window widths (#7146)
NilayYadav Jul 16, 2026
8c83478
Studio: use one shared Hugging Face token across Settings and trainin…
NilayYadav Jul 16, 2026
3555dbd
Studio: don't drop parallel tool calls after an internal no-op (#7157)
oobabooga Jul 16, 2026
c4e6dd4
Studio: extract text from PDF web results (#7154)
oobabooga Jul 16, 2026
1777aae
don't kill live llama-servers when a new Studio instance starts (#7182)
NilayYadav Jul 16, 2026
b508c8f
fix(save): unsloth_push_to_hub_gguf(save_method="lora") raises NameEr…
chuenchen309 Jul 17, 2026
8cbdfbe
Feat/model picker per model config (#6647)
Sneakr Jul 17, 2026
1c7bce4
Revert "Feat/model picker per model config (#6647)"
oobabooga Jul 17, 2026
49f2879
fix(studio): recover stalled Hub downloads over HTTP (#6858)
rodboev Jul 17, 2026
57785f9
fix(mlx): relax context-store timeout by default (#7141)
Lyxot Jul 17, 2026
2139200
Studio: don't re-download updated GGUFs on load (#7209)
oobabooga Jul 17, 2026
5441266
Fix Studio reasoning channel rendering (#7121)
Lyxot Jul 17, 2026
8ff2f8e
fix(studio): ignore reasoning in tool reprompts (#7134)
Lyxot Jul 17, 2026
bf4185a
Studio: don't apply nest_asyncio on plain CLI starts (breaks asyncio …
NilayYadav Jul 17, 2026
a14b032
Propagate fp8 block_size before the early return in get_lora_paramete…
vineethsaivs Jul 17, 2026
a8ff867
feat(studio): expose an opt-in MCP control plane (#7191)
RitwijParmar Jul 17, 2026
4e09328
fix(tokenizer): check for tokenizer.model after saving it, not before…
chuenchen309 Jul 18, 2026
9db639f
Stabilize Studio regression tests (#7192)
shimmyshimmer Jul 18, 2026
e55d0e6
fix(dataprep): skip .jsonl lines that are valid JSON but not objects …
chuenchen309 Jul 18, 2026
9073f07
fix(studio): equal padding in the dataset source segmented control (#…
shimmyshimmer Jul 19, 2026
d8aa0df
Studio: keep stale canvas from surviving into a new chat (#7229)
NilayYadav Jul 19, 2026
95fa3fb
Allow API key for Ollama connections (#7173)
shimmyshimmer Jul 19, 2026
c2cf2b4
Studio: keep the permission pill label when composer pills collapse (…
shimmyshimmer Jul 19, 2026
4e4af72
fix(studio): honor MLX adapter state in compare mode (#7196)
Lyxot Jul 19, 2026
030524a
security: refresh the fastapi C2-loop baseline entry for the current …
danielhanchen Jul 19, 2026
e9ef2ac
Studio: enforce 60s minimum on idle auto-unload TTL (0 stays off) (#7…
NilayYadav Jul 19, 2026
6d8c18c
Replace standalone Studio wording with Unsloth (#7221)
shimmyshimmer Jul 19, 2026
74d1a28
Studio: hide the RAG embedder and llama.cpp probe from the hub cached…
shimmyshimmer Jul 19, 2026
b6eea81
Studio: fix per-GPU VRAM reporting on Windows ROCm
danielhanchen Jul 19, 2026
cf6d01b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 19, 2026
a418084
Studio: report unknown VRAM instead of fabricating or zeroing it
danielhanchen Jul 19, 2026
553ed02
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 19, 2026
f568066
Render unknown VRAM as Unknown instead of zero in the System tab
danielhanchen Jul 19, 2026
70f2335
Render unknown VRAM as Unknown in the floating monitor and the util tile
danielhanchen Jul 19, 2026
b8317e6
Attribute per-adapter VRAM usage only when capacity forces the mapping
danielhanchen Jul 19, 2026
891e87b
Report unknown VRAM usage when a hidden adapter survives the noise fi…
danielhanchen Jul 19, 2026
548aeb9
Report unknown when only a placeholder adapter counter survives the n…
danielhanchen Jul 19, 2026
1b84e31
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 19, 2026
1e33871
studio: attribute Windows/ROCm VRAM only when capacity forces a clean…
danielhanchen Jul 19, 2026
28ed7bf
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jul 19, 2026
7fc25bd
studio: keep the unified-memory total when Windows-ROCm used is unknown
Jul 19, 2026
b50581d
Tighten comments in the ROCm/Windows VRAM reporting path
Jul 20, 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 Unsloth 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
682 changes: 682 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 Unsloth 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