|
24 | 24 | ).expanduser() |
25 | 25 |
|
26 | 26 |
|
27 | | -KNOWN_VERBS = ["chat", "browser", "download", "generate", "eval", "export", "list", "remove", "where"] |
| 27 | +# Subcommands related to downloading and managing model artifacts |
| 28 | +INVENTORY_VERBS = ["download", "list", "remove", "where"] |
| 29 | + |
| 30 | +# List of all supported subcommands in torchchat |
| 31 | +KNOWN_VERBS = ["chat", "browser", "generate", "eval", "export"] + INVENTORY_VERBS |
28 | 32 |
|
29 | 33 | # Handle CLI arguments that are common to a majority of subcommands. |
30 | 34 | def check_args(args, verb: str) -> None: |
31 | 35 | # Handle model download. Skip this for download, since it has slightly |
32 | 36 | # different semantics. |
33 | 37 | if ( |
34 | | - verb not in ["download", "list", "remove"] |
| 38 | + verb not in INVENTORY_VERBS |
35 | 39 | and args.model |
36 | 40 | and not is_model_downloaded(args.model, args.model_directory) |
37 | 41 | ): |
38 | 42 | download_and_convert(args.model, args.model_directory, args.hf_token) |
39 | 43 |
|
40 | 44 |
|
41 | | -def add_arguments_for_verb(parser, verb: str): |
| 45 | +def add_arguments_for_verb(parser, verb: str) -> None: |
42 | 46 | # Model specification. TODO Simplify this. |
43 | 47 | # A model can be specified using a positional model name or HuggingFace |
44 | 48 | # path. Alternatively, the model can be specified via --gguf-path or via |
45 | 49 | # an explicit --checkpoint-dir, --checkpoint-path, or --tokenizer-path. |
| 50 | + |
| 51 | + if verb in INVENTORY_VERBS: |
| 52 | + _configure_artifact_inventory_args(parser, verb) |
| 53 | + _add_cli_metadata_args(parser) |
| 54 | + return |
| 55 | + |
46 | 56 | parser.add_argument( |
47 | 57 | "model", |
48 | 58 | type=str, |
@@ -191,12 +201,6 @@ def add_arguments_for_verb(parser, verb: str): |
191 | 201 | choices=allowable_dtype_names(), |
192 | 202 | help="Override the dtype of the model (default is the checkpoint dtype). Options: bf16, fp16, fp32, fast16, fast", |
193 | 203 | ) |
194 | | - parser.add_argument( |
195 | | - "-v", |
196 | | - "--verbose", |
197 | | - action="store_true", |
198 | | - help="Verbose output", |
199 | | - ) |
200 | 204 | parser.add_argument( |
201 | 205 | "--quantize", |
202 | 206 | type=str, |
@@ -252,6 +256,46 @@ def add_arguments_for_verb(parser, verb: str): |
252 | 256 | default=5000, |
253 | 257 | help="Port for the web server in browser mode", |
254 | 258 | ) |
| 259 | + _add_cli_metadata_args(parser) |
| 260 | + |
| 261 | + |
| 262 | +# Add CLI Args that are relevant to any subcommand execution |
| 263 | +def _add_cli_metadata_args(parser) -> None: |
| 264 | + parser.add_argument( |
| 265 | + "-v", |
| 266 | + "--verbose", |
| 267 | + action="store_true", |
| 268 | + help="Verbose output", |
| 269 | + ) |
| 270 | + |
| 271 | + |
| 272 | +# Configure CLI Args specific to Model Artifact Management |
| 273 | +def _configure_artifact_inventory_args(parser, verb: str) -> None: |
| 274 | + if verb in ["download", "remove", "where"]: |
| 275 | + parser.add_argument( |
| 276 | + "model", |
| 277 | + type=str, |
| 278 | + nargs="?", |
| 279 | + default=None, |
| 280 | + help="Model name for well-known models", |
| 281 | + ) |
| 282 | + |
| 283 | + if verb in INVENTORY_VERBS: |
| 284 | + parser.add_argument( |
| 285 | + "--model-directory", |
| 286 | + type=Path, |
| 287 | + default=default_model_dir, |
| 288 | + help=f"The directory to store downloaded model artifacts. Default: {default_model_dir}", |
| 289 | + ) |
| 290 | + |
| 291 | + if verb == "download": |
| 292 | + parser.add_argument( |
| 293 | + "--hf-token", |
| 294 | + type=str, |
| 295 | + default=None, |
| 296 | + help="A HuggingFace API token to use when downloading model artifacts", |
| 297 | + ) |
| 298 | + |
255 | 299 |
|
256 | 300 | # Add CLI Args specific to Model Evaluation |
257 | 301 | def _add_evaluation_args(parser) -> None: |
|
0 commit comments