{"record":{"id":"63789601d053a829","repo":"sgl-project/sglang","slug":"diffusers-kwargs-must-be-valid-json-got-args","errorCode":null,"errorMessage":"--diffusers-kwargs must be valid JSON. Got: {args.diffusers_kwargs}","messagePattern":"--diffusers-kwargs must be valid JSON\\. Got: (.+?)","errorType":"console","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/entrypoints/cli/generate.py","lineNumber":195,"sourceCode":"    sampling_params_kwargs.update(sampling_params_cls.get_cli_args(args))\n    _apply_output_file_path_override(args, sampling_params_kwargs)\n    sampling_params_kwargs[\"request_id\"] = generate_request_id()\n    if sampling_params_kwargs.get(\"use_diffusion_decoder\", False):\n        server_args.load_diffusion_decoder = True\n\n    # Handle diffusers-specific kwargs passed via CLI\n    if hasattr(args, \"diffusers_kwargs\") and args.diffusers_kwargs:\n        try:\n            sampling_params_kwargs[\"diffusers_kwargs\"] = json.loads(\n                args.diffusers_kwargs\n            )\n            logger.info(\n                \"Parsed diffusers_kwargs: %s\",\n                sampling_params_kwargs[\"diffusers_kwargs\"],\n            )\n        except json.JSONDecodeError as e:\n            logger.error(\"Failed to parse --diffusers-kwargs as JSON: %s\", e)\n            raise ValueError(\n                f\"--diffusers-kwargs must be valid JSON. Got: {args.diffusers_kwargs}\"\n            ) from e\n\n    generator = DiffGenerator.from_pretrained(\n        model_path=server_args.model_path, server_args=server_args, local_mode=True\n    )\n\n    results = generator.generate(sampling_params_kwargs=sampling_params_kwargs)\n\n    prompt = sampling_params_kwargs.get(\"prompt\")\n    maybe_dump_performance(args, server_args, prompt, results)\n\n\nclass GenerateSubcommand(CLISubcommand):\n    \"\"\"The `generate` subcommand for the sglang-diffusion CLI\"\"\"\n\n    def __init__(self) -> None:\n        self.name = \"generate\"","sourceCodeStart":177,"sourceCodeEnd":213,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/entrypoints/cli/generate.py#L177-L213","documentation":"Raised by the `generate` CLI command when --diffusers-kwargs is provided but is not parseable as JSON (json.JSONDecodeError). The string is json.loads-ed into sampling_params_kwargs['diffusers_kwargs']; any syntax error (trailing commas, single quotes, unquoted keys) aborts command startup.","triggerScenarios":"Running `sglang generate ... --diffusers-kwargs '{num_inference_steps: 20}'` or with single-quoted values / trailing commas — anything json.loads rejects.","commonSituations":"Copy-pasting Python-dict-style kwargs (single quotes, bare keys) from code or docs into the CLI; shell quoting issues that truncate the JSON; missing closing brace.","solutions":["Rewrite the argument as strict JSON: double quotes on keys and string values, no trailing commas","Echo or dry-run print the argument to check shell quoting didn't mangle it","Validate with `python -c \"import json,sys; json.loads(sys.argv[1])\" '<your string>'` before running the command"],"exampleFix":"# before\n--diffusers-kwargs \"{'num_inference_steps': 20,}\"\n\n# after\n--diffusers-kwargs '{\"num_inference_steps\": 20}'","handlingStrategy":"validation","validationCode":"import json\njson.loads(args.diffusers_kwargs)  # fails fast with a clear JSONDecodeError","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always write CLI JSON kwargs with double quotes and no trailing commas","Validate the string with json.loads in CI/scripts before invoking the CLI","Beware shell quoting: prefer single-quoting the whole JSON blob"],"tags":["cli","json","diffusers","argument-validation"],"backgroundTag":"invalid-json-argument","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}