106 lines
3.1 KiB
Python
106 lines
3.1 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
import yaml
|
|
|
|
from fastvideo.api import (
|
|
apply_overrides,
|
|
load_run_config,
|
|
parse_cli_overrides,
|
|
)
|
|
|
|
|
|
def test_parse_cli_overrides_casts_supported_scalar_and_collection_types() -> None:
|
|
parsed = parse_cli_overrides([
|
|
"--generator.engine.num_gpus",
|
|
"4",
|
|
"--request.runtime.enable_teacache=true",
|
|
"--request.sampling.guidance_scale",
|
|
"1.5",
|
|
"--request.prompt",
|
|
"[\"a\", \"b\"]",
|
|
"--request.extensions",
|
|
"{\"ltx2\": {\"initial_latent_path\": \"/tmp/init.pt\"}}",
|
|
"--request.output.output_video_name",
|
|
"clip",
|
|
"--request.state",
|
|
"null",
|
|
])
|
|
|
|
assert parsed == {
|
|
"generator.engine.num_gpus": 4,
|
|
"request.runtime.enable_teacache": True,
|
|
"request.sampling.guidance_scale": 1.5,
|
|
"request.prompt": ["a", "b"],
|
|
"request.extensions": {
|
|
"ltx2": {
|
|
"initial_latent_path": "/tmp/init.pt"
|
|
}
|
|
},
|
|
"request.output.output_video_name": "clip",
|
|
"request.state": None,
|
|
}
|
|
|
|
|
|
def test_parse_cli_overrides_normalizes_dashed_dotted_keys() -> None:
|
|
parsed = parse_cli_overrides([
|
|
"--generator.engine.num-gpus",
|
|
"2",
|
|
"--request.output.output-path",
|
|
"outputs/custom.mp4",
|
|
])
|
|
|
|
assert parsed == {
|
|
"generator.engine.num_gpus": 2,
|
|
"request.output.output_path": "outputs/custom.mp4",
|
|
}
|
|
|
|
|
|
def test_apply_overrides_merges_nested_dicts_without_mutating_source() -> None:
|
|
original = {
|
|
"generator": {
|
|
"model_path": "/models/base",
|
|
"engine": {
|
|
"num_gpus": 1
|
|
},
|
|
},
|
|
"request": {},
|
|
}
|
|
|
|
updated = apply_overrides(
|
|
original,
|
|
{
|
|
"generator.engine.num_gpus": 8,
|
|
"request.extensions.ltx2.initial_latent_path": "/tmp/init.pt",
|
|
},
|
|
)
|
|
|
|
assert original["generator"]["engine"]["num_gpus"] == 1
|
|
assert updated["generator"]["engine"]["num_gpus"] == 8
|
|
assert updated["request"]["extensions"]["ltx2"]["initial_latent_path"] == "/tmp/init.pt"
|
|
|
|
|
|
def test_load_run_config_applies_dotted_overrides_before_validation(tmp_path) -> None:
|
|
raw = {
|
|
"generator": {
|
|
"model_path": "/models/base"
|
|
},
|
|
"request": {
|
|
"prompt": "baseline"
|
|
},
|
|
}
|
|
path = tmp_path / "run.yaml"
|
|
path.write_text(yaml.safe_dump(raw), encoding="utf-8")
|
|
|
|
loaded = load_run_config(path,
|
|
overrides=[
|
|
"--generator.pipeline.workload_type",
|
|
"t2v",
|
|
"--request.sampling.num_frames",
|
|
"81",
|
|
"--request.extensions.ltx2.initial_latent_path",
|
|
"/tmp/latent.pt",
|
|
])
|
|
|
|
assert loaded.generator.pipeline.workload_type == "t2v"
|
|
assert loaded.request.sampling.num_frames == 81
|
|
assert loaded.request.extensions["ltx2"]["initial_latent_path"] == "/tmp/latent.pt"
|