feat(cli): add ModelScopeHub model download command line tool

add new msdown CLI command powered by modelscope SDK via uvx, support downloading models/datasets/spaces from ModelScopeHub to local directory
This commit is contained in:
2026-06-27 11:20:50 +08:00
parent bcd189ae60
commit 6f01cde8ac
3 changed files with 8 additions and 17 deletions
+1 -1
View File
@@ -36,8 +36,8 @@ filelvl = "pyflowx.cli.filelevel:main"
foldback = "pyflowx.cli.folderback:main" foldback = "pyflowx.cli.folderback:main"
foldzip = "pyflowx.cli.folderzip:main" foldzip = "pyflowx.cli.folderzip:main"
gitt = "pyflowx.cli.gittool:main" gitt = "pyflowx.cli.gittool:main"
hfdown = "pyflowx.cli.hfdownload:main"
lscalc = "pyflowx.cli.lscalc:main" lscalc = "pyflowx.cli.lscalc:main"
msdown = "pyflowx.cli.llm.msdownload:main"
packtool = "pyflowx.cli.packtool:main" packtool = "pyflowx.cli.packtool:main"
pdftool = "pyflowx.cli.pdftool:main" pdftool = "pyflowx.cli.pdftool:main"
piptool = "pyflowx.cli.piptool:main" piptool = "pyflowx.cli.piptool:main"
View File
@@ -1,36 +1,28 @@
"""Download from ModelScopeHub."""
import argparse import argparse
from pathlib import Path from pathlib import Path
from typing import Literal, get_args from typing import Literal, get_args
import pyflowx as px import pyflowx as px
from pyflowx.tasks.system import setenv
HFDownloadType = Literal["model", "dataset", "space"] DownloadType = Literal["model", "dataset", "space"]
def main(): def main():
parser = argparse.ArgumentParser(description="Download a model from HuggingFace.") parser = argparse.ArgumentParser(description="Download a model from ModelScopeHub.")
parser.add_argument("name", help="Target name.") parser.add_argument("name", help="Target name.")
parser.add_argument( parser.add_argument("--type", "-t", nargs="?", default="model", choices=get_args(DownloadType), help="Target type.")
"--type", "-t", nargs="?", default="model", choices=get_args(HFDownloadType), help="Target type."
)
parser.add_argument("--dir", default=None, help="Download directory.") parser.add_argument("--dir", default=None, help="Download directory.")
args = parser.parse_args() args = parser.parse_args()
if not args.name: if not args.name:
parser.error("name is required") parser.error("name is required")
target_name = args.name download_dir: Path = Path(args.dir) if args.dir else Path.home() / ".models" / args.name.split("/")[-1]
# 创建下载目录
if args.dir:
download_dir = Path(args.dir)
else:
download_dir = Path.home() / ".models" / target_name.split("/")[-1]
download_dir.mkdir(parents=True, exist_ok=True) download_dir.mkdir(parents=True, exist_ok=True)
graph = px.Graph.from_specs([ graph = px.Graph.from_specs([
setenv("HF_ENDPOINT", "https://hf-mirror.com"),
px.TaskSpec( px.TaskSpec(
name="download", name="download",
cmd=[ cmd=[
@@ -38,11 +30,10 @@ def main():
"modelscope", "modelscope",
"download", "download",
f"--{args.type}", f"--{args.type}",
target_name, args.name,
"--local_dir", "--local_dir",
str(download_dir), str(download_dir),
], ],
depends_on=("setenv_hf_endpoint",),
verbose=True, verbose=True,
), ),
]) ])