PaddlePaddle/PaddleOCR · error · ValueError

Model {normalized!r} is not supported with qianfan source. S

Error message

Model {normalized!r} is not supported with qianfan source. Supported models: {supported}.

What it means

ValueError from resolve_model in paddleocr_mcp/selection.py when the provider is qianfan but the requested model is not in QIANFAN_SUPPORTED_MODELS. Qianfan (Baidu Cloud) exposes only a subset of the models the MCP server knows about, so a globally supported model can still be rejected for this provider.

Source

Thrown at mcp_server/paddleocr_mcp/selection.py:72

    return _MODEL_TOOLS[model]


def resolve_model(model: Optional[str], provider: str) -> str:
    """Validate and normalize the user-facing model name."""
    normalized = (model or DEFAULT_MODEL).strip()
    normalized_provider = normalize_provider(provider)
    if normalized not in SUPPORTED_MODELS:
        supported = ", ".join(sorted(SUPPORTED_MODELS))
        raise ValueError(
            f"Unsupported model: {normalized!r}. Supported models: {supported}."
        )

    if (
        normalized_provider is InferenceProvider.QIANFAN
        and normalized not in QIANFAN_SUPPORTED_MODELS
    ):
        supported = ", ".join(sorted(QIANFAN_SUPPORTED_MODELS))
        raise ValueError(
            f"Model {normalized!r} is not supported with qianfan source. "
            f"Supported models: {supported}."
        )

    return normalized

View on GitHub (pinned to 2661c7c0ef)

Solutions

  1. Pick a model from the qianfan-specific list printed in the error message.
  2. If you need the rejected model, switch provider to appstore or self_hosted where it is supported.
  3. Upgrade the MCP server so its QIANFAN_SUPPORTED_MODELS matches what qianfan currently deploys.

Example fix

// before
paddleocr-mcp --provider qianfan --model <unsupported-model>

// after
paddleocr-mcp --provider qianfan --model <model-from-qianfan-list>
# or: paddleocr-mcp --provider self_hosted --model <unsupported-model>
Defensive patterns

Strategy: validation

Validate before calling

from paddleocr_mcp.selection import QIANFAN_SUPPORTED_MODELS

def model_ok_for_qianfan(model: str | None, provider: str) -> bool:
    if provider.strip() != "qianfan":
        return True
    return (model or "").strip() in QIANFAN_SUPPORTED_MODELS

Type guard

def is_qianfan_compatible(model: str, provider: str) -> bool:
    """True when model/provider pair passes the qianfan subset check."""
    if provider.strip() != "qianfan":
        return True
    return model.strip() in QIANFAN_SUPPORTED_MODELS

Try / catch

try:
    resolve_model(model, "qianfan")
except ValueError as e:
    if "not supported with qianfan" in str(e):
        log.error(
            "model %r unavailable on qianfan; use one of %s or switch provider",
            model, sorted(QIANFAN_SUPPORTED_MODELS),
        )
    raise

Prevention

When it happens

Trigger: Starting the MCP server with --provider qianfan --model <model not deployed on qianfan>; switching a working self_hosted/appstore config to qianfan without changing the model.

Common situations: Qianfan not yet serving a newly released model; private deployments expecting every model to be available on every provider.

Related errors


AI-assisted analysis of PaddlePaddle/PaddleOCR@2661c7c0ef (2026-08-14). Data as JSON: /api/errors/1019b8dafae32fef. Report an issue: GitHub.