fix: align multimodal client override semantics

parent 64177c2d
......@@ -39,6 +39,15 @@ def test_parse_args_leaves_mode_empty_for_interactive_fallback():
assert args.mode is None
def test_parse_args_rejects_generic_file_argument():
try:
parse_args(["llm", "--file", "sample.dat"])
except SystemExit as exc:
assert exc.code == 2
else:
raise AssertionError("parse_args accepted deprecated --file argument")
def test_resolve_mode_config_uses_mode_defaults_when_overrides_absent(tmp_path):
args = parse_args(["audio-generation", "--output-dir", str(tmp_path)])
......@@ -91,3 +100,21 @@ def test_resolve_mode_config_prefers_explicit_model_prompt_url_and_response_form
assert config["prompt"] == "Custom prompt"
assert config["response_format"] == "b64_json"
assert config["output_dir"] == tmp_path
def test_resolve_mode_config_keeps_explicit_empty_string_overrides(tmp_path):
args = parse_args([
"video-generation",
"--model", "",
"--audio-file", "",
"--video-file", "",
"--response-format", "",
"--output-dir", str(tmp_path),
])
config = resolve_mode_config(args, selected_mode="video-generation")
assert config["model"] == ""
assert config["audio_file"] == ""
assert config["video_file"] == ""
assert config["response_format"] == ""
......@@ -56,7 +56,6 @@ def build_parser() -> argparse.ArgumentParser:
parser.add_argument("--prompt", default=None)
parser.add_argument("--response-format", default=None)
parser.add_argument("--output-dir", default="tmp/manual-client-output")
parser.add_argument("--file", default=None)
parser.add_argument("--audio-file", default=None)
parser.add_argument("--video-file", default=None)
return parser
......@@ -72,12 +71,12 @@ def resolve_mode_config(args: argparse.Namespace, selected_mode: str) -> dict:
"mode": selected_mode,
"url": args.url.rstrip("/"),
"token": args.token,
"model": args.model or defaults.get("model"),
"model": args.model if args.model is not None else defaults.get("model"),
"prompt": args.prompt if args.prompt is not None else defaults.get("prompt"),
"output_dir": Path(args.output_dir),
"audio_file": args.audio_file or defaults.get("audio_file"),
"video_file": args.video_file or defaults.get("video_file"),
"response_format": args.response_format or defaults.get("response_format"),
"audio_file": args.audio_file if args.audio_file is not None else defaults.get("audio_file"),
"video_file": args.video_file if args.video_file is not None else defaults.get("video_file"),
"response_format": args.response_format if args.response_format is not None else defaults.get("response_format"),
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment