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
- Pick a model from the qianfan-specific list printed in the error message.
- If you need the rejected model, switch provider to appstore or self_hosted where it is supported.
- 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
- Treat qianfan as a restricted subset when designing model/provider config UIs.
- Validate the (model, provider) pair at config-load time, not at request time.
- Track QIANFAN_SUPPORTED_MODELS changes across MCP server upgrades.
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
- Unknown provider: {provider}
- Unsupported model: {normalized!r}. Supported models: {suppor
- Invalid data URL: expected a comma after the MIME type.
- Invalid Base64 input: {e}. Ensure the string is complete and
- Unknown model asset "${modelName}".
AI-assisted analysis of PaddlePaddle/PaddleOCR@2661c7c0ef (2026-08-14).
Data as JSON: /api/errors/1019b8dafae32fef.
Report an issue: GitHub.