zylon-ai/private-gpt · error · ValueError

Unknown default {model_type} model '{requested_default}'. Av

Error message

Unknown default {model_type} model '{requested_default}'. Available discovered models: {available}

What it means

Raised by scripts/auto_discover_models.py when the requested default model name (from the CLI or configured default) does not match any model discovered from PGPT_MODELS_* environment variables. After discovery builds the set of model names, _resolve_default_model validates the explicitly requested default against that set and refuses to guess, listing all discovered names (or 'none' if discovery found nothing).

Source

Thrown at scripts/auto_discover_models.py:82

        data.pop("sampling_params", None)
        data.pop("reasoning_sampling_params", None)
    tags = data.get("tags")
    if isinstance(tags, list):
        data["tags"] = sorted(tags)
    return data


def _resolve_default_model(
    requested_default: str | None,
    configured_default: str,
    discovered_models: list[LLMModelConfig] | list[EmbeddingModelConfig],
    model_type: str,
) -> str:
    discovered_names = {model.name for model in discovered_models}
    if requested_default:
        if requested_default not in discovered_names:
            available = ", ".join(sorted(discovered_names)) or "none"
            raise ValueError(
                f"Unknown default {model_type} model '{requested_default}'. "
                f"Available discovered models: {available}"
            )
        return requested_default

    if configured_default and configured_default in discovered_names:
        return configured_default
    if discovered_models:
        return discovered_models[0].name
    return ""


def _find_model(
    models: list[EmbeddingModelConfig],
    name: str,
) -> EmbeddingModelConfig | None:
    return next((model for model in models if model.name == name), None)

View on GitHub (pinned to 4a030776a3)

Solutions

  1. Run the script once without --default-llm/--default-embedding and read the 'Available discovered models' list in the error/output, then request one of those exact names
  2. Set the PGPT_MODELS_<ID>_* variables so the desired model is actually discovered before requesting it as default
  3. Match the exact lowercased model ID derived from the env var name (PGPT_MODELS_GPT4_API_KEY -> 'gpt4')
  4. If you intended the configured YAML default, omit the CLI default flag - it is used only when present

Example fix

# before
export PGPT_MODELS_LLAMA3_API_KEY=k
python scripts/auto_discover_models.py --default-llm gpt-4o

# after
python scripts/auto_discover_models.py --default-llm llama3
Defensive patterns

Strategy: validation

Validate before calling

import os

def discovered_model_names() -> set[str]:
    names = set()
    for key in os.environ:
        if key.startswith("PGPT_MODELS_") and key.count("_") >= 3:
            _, _, mid, _ = key.split("_", 3)
            names.add(mid.lower())
    return names

requested = "gpt-4o".strip().lower()
assert requested in discovered_model_names(), f"{requested} not discovered"

Type guard

null

Try / catch

null

Prevention

When it happens

Trigger: Running auto_discover_models.py --default-llm gpt-4o while only PGPT_MODELS_LLAMA3_* variables are set; the requested name differing in case or whitespace from the discovered name (model IDs are lowercased during discovery); discovery finding zero models because no PGPT_MODELS_ vars with at least 3 underscores are set, making every default invalid.

Common situations: Renaming a model's env vars without updating the default flag; drift between the discovery environment (CI job with injected secrets) and the local shell where discovery is empty; passing a display name ('GPT-4o') instead of the env-derived ID ('gpt4').

Related errors


AI-assisted analysis of zylon-ai/private-gpt@4a030776a3 (2026-08-15). Data as JSON: /api/errors/aa69bc13832a7c49. Report an issue: GitHub.