From 9e8b87a0fe9d6049080655437fb7d44b0a30cff0 Mon Sep 17 00:00:00 2001 From: Roland Tannous Date: Tue, 17 Mar 2026 18:38:55 +0000 Subject: [PATCH] fix: use venv_t5_root() so .venv_t5 respects UNSLOTH_STUDIO_HOME --- studio/backend/core/export/worker.py | 5 ++--- studio/backend/core/inference/worker.py | 5 ++--- studio/backend/core/training/worker.py | 5 ++--- studio/backend/utils/models/model_config.py | 3 ++- studio/backend/utils/paths/__init__.py | 2 ++ studio/backend/utils/paths/storage_roots.py | 5 +++++ studio/backend/utils/transformers_version.py | 3 ++- studio/setup.sh | 1 + 8 files changed, 18 insertions(+), 11 deletions(-) diff --git a/studio/backend/core/export/worker.py b/studio/backend/core/export/worker.py index 4f74f662ee..4ae7096142 100644 --- a/studio/backend/core/export/worker.py +++ b/studio/backend/core/export/worker.py @@ -44,9 +44,8 @@ def _activate_transformers_version(model_name: str) -> None: resolved = _resolve_base_model(model_name) if needs_transformers_5(resolved): - venv_t5 = os.path.join( - os.path.expanduser("~"), ".unsloth", "studio", ".venv_t5" - ) + from utils.paths.storage_roots import venv_t5_root + venv_t5 = str(venv_t5_root()) if os.path.isdir(venv_t5): sys.path.insert(0, venv_t5) logger.info("Activated transformers 5.x from %s", venv_t5) diff --git a/studio/backend/core/inference/worker.py b/studio/backend/core/inference/worker.py index 0693908178..89673c78f1 100644 --- a/studio/backend/core/inference/worker.py +++ b/studio/backend/core/inference/worker.py @@ -46,9 +46,8 @@ def _activate_transformers_version(model_name: str) -> None: resolved = _resolve_base_model(model_name) if needs_transformers_5(resolved): - venv_t5 = os.path.join( - os.path.expanduser("~"), ".unsloth", "studio", ".venv_t5" - ) + from utils.paths.storage_roots import venv_t5_root + venv_t5 = str(venv_t5_root()) if os.path.isdir(venv_t5): sys.path.insert(0, venv_t5) logger.info("Activated transformers 5.x from %s", venv_t5) diff --git a/studio/backend/core/training/worker.py b/studio/backend/core/training/worker.py index 57559ded54..402d456a27 100644 --- a/studio/backend/core/training/worker.py +++ b/studio/backend/core/training/worker.py @@ -40,9 +40,8 @@ def _activate_transformers_version(model_name: str) -> None: resolved = _resolve_base_model(model_name) if needs_transformers_5(resolved): - venv_t5 = os.path.join( - os.path.expanduser("~"), ".unsloth", "studio", ".venv_t5" - ) + from utils.paths.storage_roots import venv_t5_root + venv_t5 = str(venv_t5_root()) if os.path.isdir(venv_t5): sys.path.insert(0, venv_t5) logger.info("Activated transformers 5.x from %s", venv_t5) diff --git a/studio/backend/utils/models/model_config.py b/studio/backend/utils/models/model_config.py index aaf15994be..ea13e82f3f 100644 --- a/studio/backend/utils/models/model_config.py +++ b/studio/backend/utils/models/model_config.py @@ -427,7 +427,8 @@ _VLM_MODEL_TYPES = { } # Pre-computed .venv_t5 path and backend dir for subprocess version switching. -_VENV_T5_DIR = str(Path.home() / ".unsloth" / "studio" / ".venv_t5") +from utils.paths.storage_roots import venv_t5_root +_VENV_T5_DIR = str(venv_t5_root()) _BACKEND_DIR = str(Path(__file__).resolve().parent.parent.parent) # Inline script executed in a subprocess with transformers 5.x activated. diff --git a/studio/backend/utils/paths/__init__.py b/studio/backend/utils/paths/__init__.py index 507fb1106b..e9cc9da562 100644 --- a/studio/backend/utils/paths/__init__.py +++ b/studio/backend/utils/paths/__init__.py @@ -8,6 +8,7 @@ Path utilities for model and dataset handling from .path_utils import normalize_path, is_local_path, is_model_cached, get_cache_path from .storage_roots import ( studio_root, + venv_t5_root, assets_root, datasets_root, dataset_uploads_root, @@ -36,6 +37,7 @@ __all__ = [ "is_model_cached", "get_cache_path", "studio_root", + "venv_t5_root", "assets_root", "datasets_root", "dataset_uploads_root", diff --git a/studio/backend/utils/paths/storage_roots.py b/studio/backend/utils/paths/storage_roots.py index 288d9c04a9..caed95639d 100644 --- a/studio/backend/utils/paths/storage_roots.py +++ b/studio/backend/utils/paths/storage_roots.py @@ -15,6 +15,11 @@ def studio_root() -> Path: return Path.home() / ".unsloth" / "studio" +def venv_t5_root() -> Path: + """Pre-installed transformers 5.x directory, respects UNSLOTH_STUDIO_HOME.""" + return studio_root() / ".venv_t5" + + def cache_root() -> Path: """Central cache directory for all studio downloads (models, datasets, etc.).""" return studio_root() / "cache" diff --git a/studio/backend/utils/transformers_version.py b/studio/backend/utils/transformers_version.py index 5666b3be35..a071a298ca 100644 --- a/studio/backend/utils/transformers_version.py +++ b/studio/backend/utils/transformers_version.py @@ -61,7 +61,8 @@ TRANSFORMERS_5_VERSION = "5.3.0" TRANSFORMERS_DEFAULT_VERSION = "4.57.1" # Pre-installed directory for transformers 5.x — created by setup.sh / setup.ps1 -_VENV_T5_DIR = str(Path.home() / ".unsloth" / "studio" / ".venv_t5") +from utils.paths.storage_roots import venv_t5_root +_VENV_T5_DIR = str(venv_t5_root()) def _resolve_base_model(model_name: str) -> str: diff --git a/studio/setup.sh b/studio/setup.sh index ce6181111a..caf15d40c9 100755 --- a/studio/setup.sh +++ b/studio/setup.sh @@ -230,6 +230,7 @@ else # Local: create venv under studio home (shared location, not in repo) # Configurable via UNSLOTH_STUDIO_HOME; defaults to ~/.unsloth/studio STUDIO_HOME="${UNSLOTH_STUDIO_HOME:-$HOME/.unsloth/studio}" + echo " Studio home: $STUDIO_HOME" VENV_DIR="$STUDIO_HOME/.venv" VENV_T5_DIR="$STUDIO_HOME/.venv_t5" mkdir -p "$STUDIO_HOME"