{"record":{"id":"1019b8dafae32fef","repo":"PaddlePaddle/PaddleOCR","slug":"model-normalized-r-is-not-supported-with-qianfan","errorCode":null,"errorMessage":"Model {normalized!r} is not supported with qianfan source. Supported models: {supported}.","messagePattern":"Model (.+?) is not supported with qianfan source\\. Supported models: (.+?)\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"mcp_server/paddleocr_mcp/selection.py","lineNumber":72,"sourceCode":"    return _MODEL_TOOLS[model]\n\n\ndef resolve_model(model: Optional[str], provider: str) -> str:\n    \"\"\"Validate and normalize the user-facing model name.\"\"\"\n    normalized = (model or DEFAULT_MODEL).strip()\n    normalized_provider = normalize_provider(provider)\n    if normalized not in SUPPORTED_MODELS:\n        supported = \", \".join(sorted(SUPPORTED_MODELS))\n        raise ValueError(\n            f\"Unsupported model: {normalized!r}. Supported models: {supported}.\"\n        )\n\n    if (\n        normalized_provider is InferenceProvider.QIANFAN\n        and normalized not in QIANFAN_SUPPORTED_MODELS\n    ):\n        supported = \", \".join(sorted(QIANFAN_SUPPORTED_MODELS))\n        raise ValueError(\n            f\"Model {normalized!r} is not supported with qianfan source. \"\n            f\"Supported models: {supported}.\"\n        )\n\n    return normalized\n","sourceCodeStart":54,"sourceCodeEnd":78,"githubUrl":"https://github.com/PaddlePaddle/PaddleOCR/blob/2661c7c0ef5c613e8f93c6e93b2e052399f0f854/mcp_server/paddleocr_mcp/selection.py#L54-L78","documentation":"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.","triggerScenarios":"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.","commonSituations":"Qianfan not yet serving a newly released model; private deployments expecting every model to be available on every provider.","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."],"exampleFix":"// before\npaddleocr-mcp --provider qianfan --model <unsupported-model>\n\n// after\npaddleocr-mcp --provider qianfan --model <model-from-qianfan-list>\n# or: paddleocr-mcp --provider self_hosted --model <unsupported-model>","handlingStrategy":"validation","validationCode":"from paddleocr_mcp.selection import QIANFAN_SUPPORTED_MODELS\n\ndef model_ok_for_qianfan(model: str | None, provider: str) -> bool:\n    if provider.strip() != \"qianfan\":\n        return True\n    return (model or \"\").strip() in QIANFAN_SUPPORTED_MODELS","typeGuard":"def is_qianfan_compatible(model: str, provider: str) -> bool:\n    \"\"\"True when model/provider pair passes the qianfan subset check.\"\"\"\n    if provider.strip() != \"qianfan\":\n        return True\n    return model.strip() in QIANFAN_SUPPORTED_MODELS","tryCatchPattern":"try:\n    resolve_model(model, \"qianfan\")\nexcept ValueError as e:\n    if \"not supported with qianfan\" in str(e):\n        log.error(\n            \"model %r unavailable on qianfan; use one of %s or switch provider\",\n            model, sorted(QIANFAN_SUPPORTED_MODELS),\n        )\n    raise","preventionTips":["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."],"tags":["python","mcp","qianfan","provider","model-selection"],"backgroundTag":null,"analyzedSha":"2661c7c0ef5c613e8f93c6e93b2e052399f0f854","analyzedAt":"2026-08-14T20:17:30.180Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}