unsloth/studio/backend
Daniel Han 1c110dc867 Studio: gate the base_model card tag on image loads, fix an unload/reload arbiter race, and don't crash the offload fallback on a partial dual-DiT hook set
- The companion base for a GGUF/single-file image load is resolved from the GGUF
  repo's base_model card tag when no base_repo is passed, and that value loads via
  from_pretrained. The explicit base_repo is already trust-gated, but the card tag is
  attacker-controlled metadata on any remote repo, so it now clears the same
  unsloth/allowlist/local trust bar; an untrusted tag is dropped in favour of the
  curated family default and never reaches from_pretrained. This closes a pickle
  deserialization vector on the normal GGUF load path (a user loading an attacker's
  GGUF repo whose card points base_model at a malicious pipeline), matching the
  trust discipline the ControlNet path already applies via evaluate_file_security.
  The allowlist already contains every legitimate variant base, so variant
  resolution for the supported unsloth GGUFs is unchanged.
- The images/unload route ran the slow VRAM-freeing unload on a thread and then
  released the DIFFUSION arbiter owner unconditionally. release() is owner-guarded
  and identity-less, so a concurrent /images/load that re-acquired DIFFUSION while
  the unload ran would have its ownership cleared by the trailing release, and a
  later chat load would then see no owner, skip eviction, and OOM against the newly
  resident pipeline. The route now releases only when nothing is resident again.
- _apply_group_offload placed the resident companions before attaching the
  transformer's group-offload hooks so a companion OOM returns with no hooks and the
  whole-module fallback stays valid, but the streamed loop itself installs hooks on
  each DiT in turn. On a dual-DiT pipeline where the second tower failed after the
  first got its hooks, it returned False with hooks already installed, and the
  caller's enable_model_cpu_offload fallback then crashed (diffusers rejects it on a
  partially group-offloaded pipe). It now propagates the real failure once any hook
  is installed, so the load fails with its actual cause instead of a misleading crash.

Adds regression tests: the untrusted card tag dropped to the family default (trusted
tag still honoured, explicit base still wins), unload keeping ownership when a model
is still resident (and releasing when not), and the partial dual-DiT hook set
propagating rather than falling through to a crashing whole-module offload.
2026-07-07 05:34:30 +00:00
..
assets Studio: require signed capability tokens for /p preview links (#6666) 2026-06-25 21:40:48 -07:00
auth Studio: opt-in OpenAI /v1 model auto-switch and idle keep-warm (#6392) 2026-07-01 06:42:23 -07:00
core Studio: gate the base_model card tag on image loads, fix an unload/reload arbiter race, and don't crash the offload fallback on a partial dual-DiT hook set 2026-07-07 05:34:30 +00:00
hub Fix Studio custom folders on Linux external drives (#6799) 2026-07-03 19:10:04 +01:00
loggers Studio: trim serving-log noise and surface llama-server engine stats (#6377) 2026-06-17 05:37:57 -07:00
models Merge remote-tracking branch 'origin/video-hunyuan-gate' into fold-integration 2026-07-07 01:15:20 +00:00
plugins Reduce and tighten code comments and docstrings repo-wide (#6095) 2026-06-08 23:09:51 -07:00
requirements Video inference engine: LTX-2 family registry, VideoBackend, MP4 gallery 2026-07-04 13:08:43 +00:00
routes Studio: gate the base_model card tag on image loads, fix an unload/reload arbiter race, and don't crash the offload fallback on a partial dual-DiT hook set 2026-07-07 05:34:30 +00:00
state Studio: shareable per-checkpoint preview links (#6486) 2026-06-24 06:31:53 -07:00
storage Fix Studio custom folders on Linux external drives (#6799) 2026-07-03 19:10:04 +01:00
tests Studio: gate the base_model card tag on image loads, fix an unload/reload arbiter race, and don't crash the offload fallback on a partial dual-DiT hook set 2026-07-07 05:34:30 +00:00
utils Auto Xet to HTTP download fallback in from_pretrained; share Studio's fallback via unsloth_zoo (#6638) 2026-07-06 05:13:25 -07:00
__init__.py Final cleanup 2026-03-12 18:28:04 +00:00
_platform_compat.py Reduce and tighten code comments and docstrings repo-wide (#6095) 2026-06-08 23:09:51 -07:00
cloudflare_tunnel.py Reap Studio child processes when the parent dies abnormally (#6425) 2026-06-18 05:51:22 -07:00
colab.py Studio Colab: opt-in shareable Cloudflare tunnel link (#6684) 2026-06-26 00:56:23 -07:00
main.py Studio: gate untrusted companion base_repo on image loads, track image/video generation for the training guard, and body-cap the whole /v1 surface 2026-07-07 05:04:49 +00:00
run.py studio: explicit Cloudflare tunnel notice and public-exposure warning at startup (#6515) 2026-06-30 17:47:48 +02:00
startup_banner.py Fix Windows Studio UTF-8 startup handling (#6614) 2026-07-01 13:47:33 +01:00