v0.27.1:0 - fix model download: prepend ~/.local/bin so SSH finds uvx
hf-download.sh shells out to uvx (the uv installer drops it in ~/.local/bin), but the non-interactive SSH session doesn't source the user's profile, so ~/.local/bin was off PATH and downloads died with "uvx: command not found". build_download_command now prepends $HOME/.local/bin. Adds test_download.py.
This commit is contained in:
+15
-1
@@ -23,6 +23,20 @@ from .ssh import ssh_stream, StreamHandle
|
||||
Mode = Literal["spark1", "spark2", "cluster"]
|
||||
|
||||
|
||||
def build_download_command(repo: str, flags: str = "") -> str:
|
||||
"""Remote shell command that drives hf-download.sh on a Spark.
|
||||
|
||||
Prepends ~/.local/bin to PATH. hf-download.sh shells out to `uvx` (Astral's
|
||||
uv), and the official uv installer drops its binaries in ~/.local/bin — but
|
||||
our SSH session is non-interactive, so it never sources the user's profile
|
||||
and ~/.local/bin is off PATH, leaving `uvx` as "command not found". $HOME
|
||||
expands server-side, so this stays correct for any adopter/user. `repo` is
|
||||
shlex-quoted at the sink (validate_repo gates the charset upstream).
|
||||
"""
|
||||
serve = f"./hf-download.sh {quote_arg(repo)} {flags}".strip()
|
||||
return f'export PATH="$HOME/.local/bin:$PATH" && cd ~/spark-vllm-docker && {serve}'
|
||||
|
||||
|
||||
_TQDM_RE = re.compile(
|
||||
r"(\d+(?:\.\d+)?)\s*%\s*\|.*?\|\s*"
|
||||
r"([\d.]+[KMG]?B?)\s*/\s*([\d.]+[KMG]?B?)\s*"
|
||||
@@ -126,7 +140,7 @@ class DownloadManager:
|
||||
if not target_host or not target_user:
|
||||
raise RuntimeError(f"{job.mode} host not configured")
|
||||
|
||||
cmd = f"cd ~/spark-vllm-docker && ./hf-download.sh {quote_arg(job.repo)} {flags}".strip()
|
||||
cmd = build_download_command(job.repo, flags)
|
||||
job.append(f"$ {cmd}")
|
||||
job.state = "downloading"
|
||||
job.progress.phase = "Connecting to Hugging Face…"
|
||||
|
||||
Reference in New Issue
Block a user