|
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