{"record":{"id":"11112ab0104477fa","repo":"vllm-project/vllm","slug":"unexpected-level-value-args-level","errorCode":null,"errorMessage":"Unexpected level value ({args.level})","messagePattern":"Unexpected level value \\((.+?)\\)","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"tools/profiler/visualize_layerwise_profile.py","lineNumber":616,"sourceCode":"    )\n    parser.add_argument(\n        \"--step-plot-interval\",\n        type=int,\n        default=4,\n        help=\"For every `step_plot_interval` steps, plot 1 step\",\n    )\n\n    args = parser.parse_args()\n\n    # Prepare/Extract relevant args\n    make_names_unique = False\n    if args.level == \"module\":\n        depth = -2\n        make_names_unique = True\n    elif args.level == \"kernel\":\n        depth = -1\n    else:\n        raise Exception(f\"Unexpected level value ({args.level})\")\n\n    output_directory = (\n        args.output_directory if args.output_directory else Path(args.json_trace).parent\n    )\n\n    if not os.path.exists(output_directory):\n        os.makedirs(output_directory)\n\n    main(\n        Path(args.json_trace),\n        output_directory,\n        depth,\n        args.plot_metric,\n        make_names_unique,\n        args.top_k,\n        args.fold_json_node,\n    )\n","sourceCodeStart":598,"sourceCodeEnd":634,"githubUrl":"https://github.com/vllm-project/vllm/blob/c794754062d49a8fdb63ab3c5215b488b865030c/tools/profiler/visualize_layerwise_profile.py#L598-L634","documentation":"The layerwise profiler visualizer maps --level to a tree depth: 'module' -> -2 with unique names, 'kernel' -> -1. Any other string raises Exception('Unexpected level value (...)'). The argparse definition does not restrict choices, so typos surface only at this late check.","triggerScenarios":"Running tools/profiler/visualize_layerwise_profile.py with `--level` set to anything other than exactly 'module' or 'kernel' (e.g. 'modules', 'op', 'Layer').","commonSituations":"Guessing a level name from CLI help; copy-pasting a command from an old doc/blog that used a different level vocabulary.","solutions":["Use `--level module` or `--level kernel` exactly.","Check `python tools/profiler/visualize_layerwise_profile.py --help` for accepted values before running."],"exampleFix":"# before\npython tools/profiler/visualize_layerwise_profile.py --json_trace trace.json --level modules\n# -> Exception: Unexpected level value (modules)\n\n# after\npython tools/profiler/visualize_layerwise_profile.py --json_trace trace.json --level module","handlingStrategy":"validation","validationCode":"import argparse\nparser = argparse.ArgumentParser()\nparser.add_argument(\"--level\", choices=[\"module\", \"kernel\"], required=True)\nargs = parser.parse_args()  # rejects bad values with a usage error, not a late Exception","typeGuard":"def is_valid_level(value: str) -> bool:\n    return value in {\"module\", \"kernel\"}","tryCatchPattern":null,"preventionTips":["Constrain CLI enums with argparse `choices` instead of late runtime checks.","Check --help for accepted --level values before running profiler tooling."],"tags":["profiler","cli","argument-validation","tooling"],"backgroundTag":null,"analyzedSha":"c794754062d49a8fdb63ab3c5215b488b865030c","analyzedAt":"2026-08-14T21:17:39.825Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}