{"record":{"id":"f43d8f2ec601e70d","repo":"infiniflow/ragflow","slug":"ocr-model-name-is-required","errorCode":null,"errorMessage":"OCR model name is required","messagePattern":"OCR model name is required","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"api/db/joint_services/tenant_model_service.py","lineNumber":192,"sourceCode":"            model_id = tenant.tenant_embd_id\n            model_name = tenant.embd_id\n        case LLMType.ASR.value:\n            model_id = tenant.tenant_asr_id\n            model_name = tenant.asr_id\n        case LLMType.VISION.value:\n            model_id = tenant.tenant_img2txt_id\n            model_name = tenant.img2txt_id\n        case LLMType.CHAT.value:\n            model_id = tenant.tenant_llm_id\n            model_name = tenant.llm_id\n        case LLMType.RERANK.value:\n            model_id = tenant.tenant_rerank_id\n            model_name = tenant.rerank_id\n        case LLMType.TTS.value:\n            model_id = tenant.tenant_tts_id\n            model_name = tenant.tts_id\n        case LLMType.OCR.value:\n            raise Exception(\"OCR model name is required\")\n        case _:\n            raise Exception(f\"Unknown model type {model_type}\")\n    if not model_name:\n        raise Exception(f\"No default {model_type} model is set.\")\n    # Prefer resolving by tenant_model.id when available\n    if model_id:\n        try:\n            return get_model_config_by_id(tenant_id, model_type, model_id)\n        except LookupError:\n            logger.warning(\"tenant_model id=%s not found, falling back to model_name lookup for %s\", model_id, model_name)\n    return resolve_model_config(tenant_id, model_type, model_name)\n\n\ndef split_model_name(model_name: str):\n    # Parse model_name: {model_name} or {model_name}@{factory_name} or {model_name}@{instance_name}@{factory_name}\n    #\n    # The composite key is right-anchored on the provider: the *last* '@'-separated\n    # field is the factory/provider, the second-to-last is the instance (when","sourceCodeStart":174,"sourceCodeEnd":210,"githubUrl":"https://github.com/infiniflow/ragflow/blob/554fb1133ac3861732235ad9c377eb5e0a770665/api/db/joint_services/tenant_model_service.py#L174-L210","documentation":"Error \"OCR model name is required\" thrown in infiniflow/ragflow.","triggerScenarios":"Thrown at api/db/joint_services/tenant_model_service.py:192 when the library encounters an invalid state.","commonSituations":"An OCR model resolution request omits the required model name; supplying it prevents this error.","solutions":["Provide the OCR model name when configuring an OCR model type."],"exampleFix":"params = {'model_type': 'ocr', 'ocr_model_name': 'deepdoc-ocr'}","handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"554fb1133ac3861732235ad9c377eb5e0a770665","analyzedAt":"2026-08-15T09:20:16.380Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}