{"record":{"id":"98421d324f3aae4a","repo":"infiniflow/ragflow","slug":"model-model-name-not-found","errorCode":null,"errorMessage":"Model {model_name} not found.","messagePattern":"Model (.+?) not found\\.","errorType":"exception","errorClass":"LookupError","httpStatus":null,"severity":"error","filePath":"api/db/joint_services/tenant_model_service.py","lineNumber":504,"sourceCode":"\ndef resolve_model_type(tenant_id: str, model_ref: str):\n    try:\n        return get_model_type_by_id(model_ref)\n    except LookupError:\n        return get_model_type_by_name(tenant_id, model_ref)\n\n\ndef get_model_type_by_name(tenant_id: str, model_name: str):\n    pure_model_name, instance_name, provider_name = split_model_name(model_name)\n    provider_obj = TenantModelProviderService.get_by_tenant_id_and_provider_name(tenant_id, provider_name)\n    if not provider_obj:\n        raise LookupError(f\"Provider {provider_name} not found for model {model_name}.\")\n    instance_obj = TenantModelInstanceService.get_by_provider_id_and_instance_name(provider_obj.id, instance_name)\n    if not instance_obj:\n        raise LookupError(f\"Instance {instance_name} not found for model {model_name}.\")\n    model_obj = TenantModelService.get_by_provider_id_and_instance_id_and_model_name(provider_obj.id, instance_obj.id, pure_model_name)\n    if not model_obj:\n        raise LookupError(f\"Model {model_name} not found.\")\n    return get_model_type_human(model_obj.model_type)\n\n\ndef delete_models_by_instance_ids(instance_ids: list[str]):\n    return TenantModelService.delete_by_instance_ids(instance_ids)\n\n\ndef delete_instances_by_provider_ids(provider_ids: list[str]):\n    return TenantModelInstanceService.delete_by_provider_ids(provider_ids)\n\n\ndef ensure_opendataloader_from_env(tenant_id: str) -> str | None:\n    return _ensure_ocr_provider_from_env(\n        tenant_id,\n        \"OpenDataLoader\",\n        \"opendataloader-from-env\",\n        _collect_env_config(OPENDATALOADER_ENV_KEYS, OPENDATALOADER_DEFAULT_CONFIG),\n    )","sourceCodeStart":486,"sourceCodeEnd":522,"githubUrl":"https://github.com/infiniflow/ragflow/blob/554fb1133ac3861732235ad9c377eb5e0a770665/api/db/joint_services/tenant_model_service.py#L486-L522","documentation":"LookupError raised by get_model_type_by_name as the final gate: provider and instance both resolved, but TenantModelService.get_by_provider_id_and_instance_id_and_model_name found no tenant_model row for the pure model name. Unlike the id-resolution variant (line 399) this lookup is not filtered by model_type, so failure means the model name simply isn't registered under that provider+instance at all.","triggerScenarios":"Calling get_model_type_by_name with 'typo-model@Provider'; a model removed from the provider's list; names differing in case/whitespace from the registered tenant_model name.","commonSituations":"Custom model names retyped by hand; provider model list refreshed and the row dropped; names with trailing spaces from form input.","solutions":["List the provider's models (tenant_model by provider_id+instance_id) and correct the name to the stored value exactly.","Re-add the model under the provider if it was removed.","Use the tenant_model id with resolve_model_type to bypass name matching."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"rows = TenantModelService.get_by_provider_id_and_instance_id_and_model_name(provider.id, instance.id, pure_name)\nif not rows:\n    raise ValueError(f\"'{pure_name}' is not registered under {provider_name}; check exact spelling\")","typeGuard":null,"tryCatchPattern":"try:\n    t = get_model_type_by_name(tenant_id, model_name)\nexcept LookupError as e:\n    if str(e) == f\"Model {model_name} not found.\":\n        raise ValueError(\"Model name not registered under this provider\")","preventionTips":["Copy model names from the provider's model list rather than typing them.","Trim whitespace and preserve case when storing custom model names.","This lookup is NOT type-filtered — failure means the name itself is unknown."],"tags":["model-name","tenant-model","ragflow"],"backgroundTag":null,"analyzedSha":"554fb1133ac3861732235ad9c377eb5e0a770665","analyzedAt":"2026-08-15T09:20:16.380Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}