72 lines
2.5 KiB
Python
72 lines
2.5 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
# adapted from vllm: https://github.com/vllm-project/vllm/blob/v0.7.3/vllm/entrypoints/cli/serve.py
|
|
|
|
import argparse
|
|
import os
|
|
from typing import cast
|
|
|
|
from fastvideo import VideoGenerator
|
|
from fastvideo.entrypoints.cli.cli_types import CLISubcommand
|
|
from fastvideo.entrypoints.cli.inference_config import build_generate_run_config
|
|
from fastvideo.logger import init_logger
|
|
from fastvideo.utils import FlexibleArgumentParser
|
|
|
|
logger = init_logger(__name__)
|
|
_VALIDATED_RUN_CONFIG_ATTR = "_fastvideo_validated_run_config"
|
|
|
|
|
|
class GenerateSubcommand(CLISubcommand):
|
|
"""The `generate` subcommand for the FastVideo CLI"""
|
|
|
|
def __init__(self) -> None:
|
|
self.name = "generate"
|
|
super().__init__()
|
|
|
|
def cmd(self, args: argparse.Namespace) -> None:
|
|
run_config = getattr(args, _VALIDATED_RUN_CONFIG_ATTR, None)
|
|
if run_config is None:
|
|
run_config = build_generate_run_config(
|
|
args,
|
|
overrides=getattr(args, "_unknown", None),
|
|
)
|
|
logger.info("CLI generate config: %s", run_config)
|
|
|
|
generator = VideoGenerator.from_config(run_config.generator)
|
|
generator.generate(run_config.request)
|
|
|
|
def validate(self, args: argparse.Namespace) -> None:
|
|
"""Validate the arguments for this command"""
|
|
if not args.config:
|
|
raise ValueError("fastvideo generate requires --config PATH; use a nested "
|
|
"run config plus optional dotted overrides")
|
|
if not os.path.exists(args.config):
|
|
raise ValueError(f"Config file not found: {args.config}")
|
|
setattr(
|
|
args,
|
|
_VALIDATED_RUN_CONFIG_ATTR,
|
|
build_generate_run_config(
|
|
args,
|
|
overrides=getattr(args, "_unknown", None),
|
|
),
|
|
)
|
|
|
|
def subparser_init(self, subparsers: argparse._SubParsersAction) -> FlexibleArgumentParser:
|
|
generate_parser = subparsers.add_parser(
|
|
"generate",
|
|
help="Run inference on a model",
|
|
usage="fastvideo generate --config RUN_CONFIG [--dotted.override VALUE]")
|
|
|
|
generate_parser.add_argument(
|
|
"--config",
|
|
type=str,
|
|
default='',
|
|
required=False,
|
|
help="Path to a nested run config JSON or YAML file. Required.",
|
|
)
|
|
|
|
return cast(FlexibleArgumentParser, generate_parser)
|
|
|
|
|
|
def cmd_init() -> list[CLISubcommand]:
|
|
return [GenerateSubcommand()]
|