vllm-project/vllm · error · ValueError
Model {model.get('hf_id')!r} has no per-hardware renderings
Error message
Model {model.get('hf_id')!r} has no per-hardware renderings in recommended_command.by_hardware. What it means
The model's recommended_command exists, but its 'by_hardware' key is absent, not a dict, or an empty dict. The converter iterates by_hardware to offer hardware choices (or match --hardware), so an empty/invalid mapping means there is nothing to convert.
Source
Thrown at tools/recipes/recipe_json_to_vllm_config.py:361
model_json_path = model.get("json")
if not isinstance(model_json_path, str) or not model_json_path:
raise ValueError(f"Selected model {model.get('hf_id')!r} has no JSON API path.")
model_json_url = api_url(api_base, model_json_path)
model_data = load_json(model_json_url)
if not isinstance(model_data, dict):
raise ValueError(f"{model_json_url} did not return a JSON object.")
recommended = model_data.get("recommended_command")
if not isinstance(recommended, dict):
raise ValueError(
f"Model {model.get('hf_id')!r} has no rendered "
"recommended_command in the Recipes API."
)
raw_by_hardware = recommended.get("by_hardware")
if not isinstance(raw_by_hardware, dict) or not raw_by_hardware:
raise ValueError(
f"Model {model.get('hf_id')!r} has no per-hardware renderings "
"in recommended_command.by_hardware."
)
by_hardware = {
str(hw): path
for hw, path in raw_by_hardware.items()
if isinstance(path, str) and path
}
if not by_hardware:
raise ValueError(
f"Model {model.get('hf_id')!r} has no usable hardware JSON paths."
)
hardware, path = select_hardware(by_hardware, requested_hardware)
hardware_json_url = api_url(api_base, path)
hardware_data = load_json(hardware_json_url)
if not isinstance(hardware_data, dict):View on GitHub (pinned to c794754062)
Solutions
- curl the model JSON and check recommended_command.by_hardware contents
- Try a different model that has hardware renderings, or fetch a hardware recipe JSON directly and pass it as the positional source
- Update the vllm checkout if the API schema changed
- Report the incomplete rendering to the Recipes API maintainers
Defensive patterns
Strategy: validation
Validate before calling
rc = model_data["recommended_command"]
bh = rc.get("by_hardware")
if not isinstance(bh, dict) or not bh:
raise SystemExit("recommended_command.by_hardware missing or empty") Type guard
def has_hardware_map(model_data: dict) -> bool:
rc = model_data.get("recommended_command")
return isinstance(rc, dict) and isinstance(rc.get("by_hardware"), dict) and len(rc["by_hardware"]) > 0 Prevention
- Check hardware availability for your target GPU before scripting around discovery
- Version-lock against the Recipes API schema your automation expects
When it happens
Trigger: recommended_command rendered but by_hardware missing (e.g. only a generic command was rendered); hardware renderings not yet published for the model; schema change renamed the key (e.g. 'hardware' or 'by_gpu').
Common situations: Newly listed models whose hardware recipes are still being rendered; API schema evolution; mirroring only part of the recipe payload.
Related errors
- Selected model {model.get('hf_id')!r} has no JSON API path.
- {model_json_url} did not return a JSON object.
- Model {model.get('hf_id')!r} has no rendered recommended_com
- Model {model.get('hf_id')!r} has no usable hardware JSON pat
- {hardware_json_url} did not return a JSON object.
AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14).
Data as JSON: /api/errors/5da6db5d45dbb677.
Report an issue: GitHub.