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

  1. curl the model JSON and check recommended_command.by_hardware contents
  2. Try a different model that has hardware renderings, or fetch a hardware recipe JSON directly and pass it as the positional source
  3. Update the vllm checkout if the API schema changed
  4. 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

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


AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14). Data as JSON: /api/errors/5da6db5d45dbb677. Report an issue: GitHub.