Hey guys, we're doing one more-ish update before a major revamp which is likely coming this week or next week. Our revamp will change a lot of things, especially with new major features and a lot of design changes.
- NEW: API calling support now with image generation + editing, proper web search, code execution, auto prompt caching. Connect OpenAI, Anthropic and more.
unsloth studio updateshould now work properly. For Mac users, use the install curl command instead:curl -fsSL https://unsloth.ai/install.sh | sh- Proper support for non-English languages e.g. Japanese, Chinese, Indian etc.
apicalling.unsloth.mp4
Many of you may have missed our previous release which only lasted for one day. We introduced:
- Connect to external inference backends: vLLM, Ollama, llama-server
- Security improvements
- Auto MTP speculative decoding for MTP GGUFs; get the best settings customized for your hardware.
API provider calling & external connections
- You can now connect Unsloth to any API cloud provider (OpenAI, Anthropic, OpenRouter etc.)
- Built-in web search for OpenAI, Anthropic, OpenRouter and Kimi
- Built-in code execution for OpenAI and Anthropic (Anthropic containers persist and are reused across turns)
- Prompt caching is enabled for OpenAI and Anthropic models saving 50 to 90% of costs.
- Image generation + editing
- API key now optional for local providers (llama.cpp / vLLM / Ollama)
- Auto-load models when adding a cloud provider
Other Unsloth Studio updates
- OpenDocument chat attachments
- o3 reasoning summary payload
- Sending/prompting non-English languages (e.g. Japanese, Chinese) now works properly
- IME composer hardening, RTL
dir="auto", long log-line truncation fix - Tool reasoning trace rendering in UI
- Fully offline support: cached GGUF discovery and offline DNS auto-detect for both inference and training
Unsloth Studio security improvements
- Authentication rate-limiting, proxy-aware so reverse proxies don't bypass it
- Sandboxed worker with a tightened blocklist (bash,
hf upload,NOFILE) - Path containment so workers can't escape their in-flight tmp dirs
- Strict schema validation across the Studio API
- Tightened CSP / security headers (only legitimate favicon hosts allowed)
- Removed the
torch.loadfallback ontraining_args.binso untrusted pickles can never execute on model load - Hardened Tauri desktop release flow
- Frontend auth: singleflight token refresh, current-password input on changes, working logout, shared 422 helper
- Cancel cleanup now scoped strictly to in-flight tmp dirs so it can never delete user state
What's Changed
- install: bump unsloth floor to >=2026.5.5 by @danielhanchen in #5621
- Studio: persist chat toggles and preserve custom sampling by @Imagineer99 in #5587
- Studio: add connections toggle and order hosted providers by @Imagineer99 in #5588
- studio/ci: harden three pre-existing CI flakes by @danielhanchen in #5627
- Studio: expand Connections model picker for local inference server by @Imagineer99 in #5643
- Move uninstall scripts into scripts/ and fix references by @danielhanchen in #5644
- Studio: provider model loading controls by @Imagineer99 in #5645
- Studio: unify connection copy by @Imagineer99 in #5654
- Remove dead chat suggestions wiring by @alkinun in #5665
- Studio: Claude Code Anthropic API tool compatibility by @Imagineer99 in #5390
- studio/frontend: friendlier 404 fallback for unknown routes by @danielhanchen in #5664
- chore(deps): bump the npm-oxc-validator group across 1 directory with 2 updates by @dependabot[bot] in #5667
- studio/chat: Disable send button for empty composer by @harryfrzz in #5647
- studio/frontend: correct Think pill aria-label before model loads by @danielhanchen in #5655
- studio/frontend: fix onboarding CSP violations by @danielhanchen in #5658
- studio/frontend: set per-route document.title by @danielhanchen in #5660
- Fix Windows Tauri build and signing by @wasimysaid in #5694
- Respect GC for GRPO by @Datta0 in #5269
- studio: unblock /load event loop on detect_audio_type (#5642, #5635) by @danielhanchen in #5669
- studio: settle GPU VRAM after killing llama-server before the next reload by @danielhanchen in #5693
- Studio: surface prompt-cache token counts in /v1/chat/completions usage chunk by @danielhanchen in #5670
- Studio: per-model Anthropic server-side tool versions by @danielhanchen in #5679
- Studio: support Anthropic 1h cache TTL via prompt_cache_ttl by @danielhanchen in #5685
- Studio: wire OpenAI image_generation tool by @danielhanchen in #5688
- Studio: per-session cost calculator + /api/providers/pricing endpoint by @danielhanchen in #5690
- Studio: wire Anthropic web_fetch server-side tool by @danielhanchen in #5671
- Studio: persist chat history in backend storage by @Imagineer99 in #5272
- Studio: wire Anthropic server-side context compaction by @danielhanchen in #5686
- Studio: wire OpenAI Responses server-side context compaction by @danielhanchen in #5687
- Studio: PDF / document attachments for Anthropic + OpenAI by @danielhanchen in #5689
- Studio: reconcile external providers across browsers after delete by @danielhanchen in #5698
- Studio: persist external provider selection across page refresh by @danielhanchen in #5697
- Studio: add Anthropic and OpenAI prompt guards for disabled tools by @Imagineer99 in #5674
- Studio: persist external checkpoint when picker uses setParams by @danielhanchen in #5700
- Studio: surface OpenAI image_generation as composer Images pill by @danielhanchen in #5699
- Studio: expose Anthropic 5m vs 1h prompt cache TTL in Configuration by @danielhanchen in #5703
- Fix connected chat model selection after refresh by @wasimysaid in #5702
- Studio: render OpenAI image_generation results inline in chat by @danielhanchen in #5705
- Truncate long code execution tool output by @wasimysaid in #5708
- fix(gpt-oss): prefer flex attention over sdpa by @Datta0 in #5701
- Bump install.sh / install.ps1 pin to unsloth>=2026.5.6 by @danielhanchen in #5716
- ci: unblock Studio Windows + Linux + Mac smoke (supersedes #5733, #5734, #5738) by @danielhanchen in #5741
- ci: broaden Linux + narrow Windows llama.cpp runtime patterns + trim #5741 comments by @danielhanchen in #5746
- Lower default RL weight_decay from 0.01 to 0.001 for LoRA by @danielhanchen in #5747
- Studio: strip orphan tool_call XML leaking into visible content by @danielhanchen in #5735
- Bump install.sh / install.ps1 pin to unsloth>=2026.5.7 by @danielhanchen in #5753
- Fix MLX Studio base model export save method by @Lyxot in #5727
- fix(chat_templates): check find() return value before slicing on placeholders by @Ricardo-M-L in #5763
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #5773
- Studio: stop seeded admin to cross-origin callers by @danielhanchen in #5739
- Studio: surface external-provider cache hits and writes in context bar by @danielhanchen in #5736
- Studio: Anthropic fast_mode toggle and streaming refusal handling by @danielhanchen in #5715
- Studio: rewrite OpenAI Responses citation markers to markdown links by @danielhanchen in #5713
- Studio: standalone Fetch pill for Anthropic web_fetch by @danielhanchen in #5742
- Studio: surface Anthropic document citations inline + in Sources panel by @danielhanchen in #5718
- Studio: pricing follow-up to #5690 (longest-prefix match + chat-style usage keys) by @danielhanchen in #5722
- Support follow-up edits for generated images by @wasimysaid in #5712
- Recipe Studio local model selector by @wasimysaid in #5769
- Improve image generation UI by @wasimysaid in #5784
- Studio: per-card web_search result + shell_call output fallback (OpenAI) by @danielhanchen in #5785
- Keep generated image loading dots animated by @wasimysaid in #5786
- Studio: auto-recover when shadowed 'unsloth' on PATH hides the frontend dist by @danielhanchen in #5782
- studio/frontend: show "1 second" instead of "1 seconds" in thinking blocks by @oobabooga in #5777
- Studio: stop the model from replying twice when it refuses by @oobabooga in #5775
- studio/frontend: add space above the scroll-to-bottom arrow in chat by @oobabooga in #5776
- Fix unsloth studio update silently downgrading on macOS arm64 by @danielhanchen in #5767
New Contributors
- @harryfrzz made their first contribution in #5647
- @Lyxot made their first contribution in #5727
- @oobabooga made their first contribution in #5777
Full Changelog: v0.1.41-beta...0.1.417-beta