* Replace standalone Studio wording with Unsloth Replace the single word Studio with Unsloth wherever it is used as shorthand for Unsloth Studio in docs, CLI output, UI strings, i18n locales, workflow display names, comments and docstrings. Kept unchanged: the full name Unsloth Studio, third party product names (LM Studio, Visual Studio, Mac Studio), feature names (Recipe Studio, Fine-tuning Studio and its translations), and all identifiers such as env vars, commands, paths and filenames. * Address review feedback on the Studio wording rename Use "an" before Unsloth where the rename left the article as "a". Restore the split brand where Unsloth and Studio render as two halves of the full product name: the onboarding sidebar subtitle and the IPv6 localhost warning. Scope two messages to the full name Unsloth Studio where plain Unsloth was misleading: the AMD README bullet and the CLI studio setup error.
65 lines
2.2 KiB
Python
65 lines
2.2 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-only
|
|
# Copyright 2026-present the Unsloth AI Inc. team. All rights reserved. See /studio/LICENSE.AGPL-3.0
|
|
|
|
"""Persisted opt-in controls for Helper LLM startup pre-cache."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
from typing import Any
|
|
|
|
HELPER_PRECACHE_SETTING_KEY = "helper_model_preload_on_startup"
|
|
DEFAULT_HELPER_PRECACHE_ENABLED = False
|
|
|
|
|
|
def _coerce_bool(value: Any) -> bool | None:
|
|
if isinstance(value, bool):
|
|
return value
|
|
if isinstance(value, str):
|
|
normalized = value.strip().lower()
|
|
if normalized in {"1", "true", "yes", "on"}:
|
|
return True
|
|
if normalized in {"0", "false", "no", "off", ""}:
|
|
return False
|
|
return None
|
|
|
|
|
|
def helper_model_disabled_by_env() -> bool:
|
|
"""Return True when existing broad helper-disable env var is active."""
|
|
return os.environ.get("UNSLOTH_HELPER_MODEL_DISABLE", "").strip() in {"1", "true"}
|
|
|
|
|
|
def get_helper_precache_enabled() -> bool:
|
|
"""Read the persisted startup pre-cache preference.
|
|
|
|
Missing or unreadable settings default to False so Unsloth startup never
|
|
performs optional network work unless the user explicitly opted in.
|
|
"""
|
|
try:
|
|
from storage.studio_db import get_app_setting
|
|
stored = get_app_setting(HELPER_PRECACHE_SETTING_KEY, None)
|
|
except Exception:
|
|
stored = None
|
|
parsed = _coerce_bool(stored)
|
|
return parsed if parsed is not None else DEFAULT_HELPER_PRECACHE_ENABLED
|
|
|
|
|
|
def set_helper_precache_enabled(value: Any) -> bool:
|
|
"""Persist whether Unsloth should pre-cache the Helper LLM at startup."""
|
|
parsed = _coerce_bool(value)
|
|
if parsed is None:
|
|
raise ValueError("Helper LLM startup pre-cache must be true or false.")
|
|
|
|
from storage.studio_db import upsert_app_settings
|
|
|
|
upsert_app_settings({HELPER_PRECACHE_SETTING_KEY: parsed})
|
|
return parsed
|
|
|
|
|
|
def should_preload_helper_on_startup() -> bool:
|
|
"""Gate the startup pre-cache thread.
|
|
|
|
The persisted setting is opt-in and the existing broad disable env var wins.
|
|
Explicit AI Assist calls do not use this gate; they remain user-triggered.
|
|
"""
|
|
return get_helper_precache_enabled() and not helper_model_disabled_by_env()
|