diff --git a/setup.sh b/setup.sh index fbfc1937b7..8e5ae2ac92 100755 --- a/setup.sh +++ b/setup.sh @@ -186,14 +186,14 @@ else install_python_stack # ── 6b. Pre-install transformers 5.x into .venv_t5/ ── - # Models like GLM-4.7-Flash need transformers>=5.1.0. Instead of pip-installing + # Models like GLM-4.7-Flash need transformers>=5.2.0. Instead of pip-installing # at runtime (slow, ~10-15s), we pre-install into a separate directory. # The training subprocess just prepends .venv_t5/ to sys.path — instant switch. echo "" echo " Pre-installing transformers 5.x for newer model support..." VENV_T5_DIR="$SCRIPT_DIR/.venv_t5" mkdir -p "$VENV_T5_DIR" - run_quiet "pip install transformers 5.x" pip install --target "$VENV_T5_DIR" --no-deps "transformers==5.1.0" + run_quiet "pip install transformers 5.x" pip install --target "$VENV_T5_DIR" --no-deps "transformers==5.2.0" run_quiet "pip install huggingface_hub for t5" pip install --target "$VENV_T5_DIR" --no-deps "huggingface_hub==1.3.0" echo "✅ Transformers 5.x pre-installed to .venv_t5/" diff --git a/studio/backend/core/export/worker.py b/studio/backend/core/export/worker.py index a581813221..2b36dbeede 100644 --- a/studio/backend/core/export/worker.py +++ b/studio/backend/core/export/worker.py @@ -49,7 +49,7 @@ def _activate_transformers_version(model_name: str, project_root: str) -> None: os.makedirs(venv_t5, exist_ok=True) r1 = sp.run( [sys.executable, "-m", "pip", "install", "--target", venv_t5, - "--no-deps", "transformers==5.1.0"], + "--no-deps", "transformers==5.2.0"], stdout=sp.PIPE, stderr=sp.STDOUT, ) r2 = sp.run( diff --git a/studio/backend/core/inference/worker.py b/studio/backend/core/inference/worker.py index 99ead90f9c..4495e4bd8a 100644 --- a/studio/backend/core/inference/worker.py +++ b/studio/backend/core/inference/worker.py @@ -51,7 +51,7 @@ def _activate_transformers_version(model_name: str, project_root: str) -> None: os.makedirs(venv_t5, exist_ok=True) r1 = sp.run( [sys.executable, "-m", "pip", "install", "--target", venv_t5, - "--no-deps", "transformers==5.1.0"], + "--no-deps", "transformers==5.2.0"], stdout=sp.PIPE, stderr=sp.STDOUT, ) r2 = sp.run( diff --git a/studio/backend/core/training/worker.py b/studio/backend/core/training/worker.py index 1ed6b00131..321645ea2a 100644 --- a/studio/backend/core/training/worker.py +++ b/studio/backend/core/training/worker.py @@ -46,7 +46,7 @@ def _activate_transformers_version(model_name: str, project_root: str) -> None: os.makedirs(venv_t5, exist_ok=True) r1 = sp.run( [sys.executable, "-m", "pip", "install", "--target", venv_t5, - "--no-deps", "transformers==5.1.0"], + "--no-deps", "transformers==5.2.0"], stdout=sp.PIPE, stderr=sp.STDOUT, ) r2 = sp.run( diff --git a/studio/backend/utils/transformers_version.py b/studio/backend/utils/transformers_version.py index eac64e6d63..8efbab46a2 100644 --- a/studio/backend/utils/transformers_version.py +++ b/studio/backend/utils/transformers_version.py @@ -2,7 +2,7 @@ Automatic transformers version switching. Some newer model architectures (Ministral-3, GLM-4.7-Flash, Qwen3-30B-A3B MoE, -tiny_qwen3_moe) require transformers>=5.1.0, while everything else needs the +tiny_qwen3_moe) require transformers>=5.2.0, while everything else needs the default 4.57.x that ships with Unsloth. When loading a LoRA adapter with a custom name, we resolve the base model from @@ -54,7 +54,7 @@ TRANSFORMERS_5_MODEL_SUBSTRINGS: tuple[str, ...] = ( ) # Versions -TRANSFORMERS_5_VERSION = "5.1.0" +TRANSFORMERS_5_VERSION = "5.2.0" TRANSFORMERS_DEFAULT_VERSION = "4.57.1" # Pre-installed directory for transformers 5.x — created by setup.sh / setup.ps1 @@ -111,7 +111,7 @@ def _resolve_base_model(model_name: str) -> str: def needs_transformers_5(model_name: str) -> bool: """Return True if *model_name* belongs to an architecture that requires - ``transformers>=5.1.0``.""" + ``transformers>=5.2.0``.""" lowered = model_name.lower() return any(sub in lowered for sub in TRANSFORMERS_5_MODEL_SUBSTRINGS)