studio: desktop_auth env-aware + legacy-root llama.cpp consistency
- desktop_auth.rs: honor UNSLOTH_STUDIO_HOME / STUDIO_HOME for the .desktop_secret path so Tauri desktop login works against custom-root installs instead of always reading ~/.unsloth/studio/auth/. - install.sh / install.ps1 / unsloth_cli/commands/studio.py: when an env override resolves to the legacy default ($HOME/.unsloth/studio), set UNSLOTH_LLAMA_CPP_PATH to ~/.unsloth/llama.cpp (matching setup.sh / setup.ps1's legacy-equality branch). Previously the persisted value pointed at $STUDIO_HOME/llama.cpp, which was a non-existent location and broke unsloth-zoo's import-time GGUF binding for that edge case.
This commit is contained in:
parent
8677c90f00
commit
151070cdb8
4 changed files with 57 additions and 3 deletions
11
install.ps1
11
install.ps1
|
|
@ -422,8 +422,17 @@ function Install-UnslothStudio {
|
|||
# the user re-exporting the env var. Default installs get an
|
||||
# empty string here so behavior matches today exactly.
|
||||
$studioHomeExport = if ($StudioRedirectMode -eq 'env') {
|
||||
# Mirror setup.ps1: when an env override happens to equal the
|
||||
# legacy default, llama.cpp still lives at ~/.unsloth/llama.cpp.
|
||||
# Keep the persisted UNSLOTH_LLAMA_CPP_PATH consistent with that.
|
||||
$_legacyStudio = Join-Path $env:USERPROFILE ".unsloth\studio"
|
||||
$_llamaPath = if ($StudioHome -eq $_legacyStudio) {
|
||||
Join-Path $env:USERPROFILE ".unsloth\llama.cpp"
|
||||
} else {
|
||||
Join-Path $StudioHome "llama.cpp"
|
||||
}
|
||||
$_sq = $StudioHome -replace "'", "''"
|
||||
$_llama = (Join-Path $StudioHome "llama.cpp") -replace "'", "''"
|
||||
$_llama = $_llamaPath -replace "'", "''"
|
||||
"`$env:UNSLOTH_STUDIO_HOME = '$_sq'`n`$env:UNSLOTH_LLAMA_CPP_PATH = '$_llama'`n"
|
||||
} else { "" }
|
||||
|
||||
|
|
|
|||
12
install.sh
12
install.sh
|
|
@ -611,8 +611,18 @@ LAUNCHER_EOF
|
|||
# custom-root build. Default installs do NOT get these lines so the
|
||||
# legacy ~/.unsloth/studio + ~/.unsloth/llama.cpp resolution stands.
|
||||
if [ "$_STUDIO_HOME_REDIRECT" = "env" ]; then
|
||||
# Mirror setup.sh's legacy-equality check: when an env override
|
||||
# happens to point at the legacy default, llama.cpp still lives
|
||||
# at ~/.unsloth/llama.cpp (one shared build across legacy
|
||||
# installs) -- keep UNSLOTH_LLAMA_CPP_PATH consistent with that.
|
||||
_css_legacy_studio="$HOME/.unsloth/studio"
|
||||
if [ "$STUDIO_HOME" = "$_css_legacy_studio" ]; then
|
||||
_css_llama_path="$HOME/.unsloth/llama.cpp"
|
||||
else
|
||||
_css_llama_path="$STUDIO_HOME/llama.cpp"
|
||||
fi
|
||||
_css_quoted_home=$(printf '%s' "$STUDIO_HOME" | sed "s/'/'\\\\''/g")
|
||||
_css_quoted_llama=$(printf '%s' "$STUDIO_HOME/llama.cpp" | sed "s/'/'\\\\''/g")
|
||||
_css_quoted_llama=$(printf '%s' "$_css_llama_path" | sed "s/'/'\\\\''/g")
|
||||
printf '%s\n' "export UNSLOTH_STUDIO_HOME='$_css_quoted_home'"
|
||||
printf '%s\n' "export UNSLOTH_LLAMA_CPP_PATH='$_css_quoted_llama'"
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -57,6 +57,10 @@ fn auth_secret_path(home: &Path, filename: &str) -> PathBuf {
|
|||
.join(filename)
|
||||
}
|
||||
|
||||
fn auth_secret_path_in_studio(studio: &Path, filename: &str) -> PathBuf {
|
||||
studio.join("auth").join(filename)
|
||||
}
|
||||
|
||||
fn auth_url(port: u16, route: &str) -> String {
|
||||
format!("http://127.0.0.1:{port}/api/auth/{route}")
|
||||
}
|
||||
|
|
@ -65,7 +69,21 @@ fn home_dir() -> Result<PathBuf, String> {
|
|||
dirs::home_dir().ok_or_else(|| "Could not determine home directory".to_string())
|
||||
}
|
||||
|
||||
fn studio_root_from_env() -> Option<PathBuf> {
|
||||
for var in ["UNSLOTH_STUDIO_HOME", "STUDIO_HOME"] {
|
||||
if let Some(value) = std::env::var_os(var) {
|
||||
if !value.is_empty() {
|
||||
return Some(PathBuf::from(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
fn desktop_secret_path() -> Result<PathBuf, String> {
|
||||
if let Some(studio) = studio_root_from_env() {
|
||||
return Ok(auth_secret_path_in_studio(&studio, ".desktop_secret"));
|
||||
}
|
||||
Ok(auth_secret_path(&home_dir()?, ".desktop_secret"))
|
||||
}
|
||||
|
||||
|
|
@ -308,6 +326,15 @@ mod tests {
|
|||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn auth_secret_path_in_studio_joins_under_custom_root() {
|
||||
let studio = PathBuf::from("/srv/ws/studio");
|
||||
assert_eq!(
|
||||
auth_secret_path_in_studio(&studio, ".desktop_secret"),
|
||||
PathBuf::from("/srv/ws/studio/auth/.desktop_secret")
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn auth_url_builds_local_endpoint() {
|
||||
assert_eq!(
|
||||
|
|
|
|||
|
|
@ -67,7 +67,15 @@ STUDIO_HOME, _STUDIO_HOME_IS_CUSTOM = _resolve_studio_home()
|
|||
# correct build dir for GGUF export.
|
||||
if _STUDIO_HOME_IS_CUSTOM:
|
||||
os.environ.setdefault("UNSLOTH_STUDIO_HOME", str(STUDIO_HOME))
|
||||
os.environ.setdefault("UNSLOTH_LLAMA_CPP_PATH", str(STUDIO_HOME / "llama.cpp"))
|
||||
# Mirror setup.sh / setup.ps1's legacy-equality check: when an env
|
||||
# override happens to equal the legacy default, llama.cpp still lives
|
||||
# at ~/.unsloth/llama.cpp (one shared build across legacy installs).
|
||||
_legacy_studio = (Path.home() / ".unsloth" / "studio").resolve()
|
||||
if STUDIO_HOME.resolve() == _legacy_studio:
|
||||
_llama_dir = Path.home() / ".unsloth" / "llama.cpp"
|
||||
else:
|
||||
_llama_dir = STUDIO_HOME / "llama.cpp"
|
||||
os.environ.setdefault("UNSLOTH_LLAMA_CPP_PATH", str(_llama_dir))
|
||||
BOOTSTRAP_PASSWORD_FILE = ".bootstrap_password"
|
||||
DESKTOP_SECRET_FILE = ".desktop_secret"
|
||||
DEFAULT_ADMIN_USERNAME = "unsloth"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue