{"record":{"id":"c39c1e497e8c9a65","repo":"opendatalab/MinerU","slug":"invalid-effort-allowed-values-allowed-values","errorCode":null,"errorMessage":"Invalid effort. Allowed values: {allowed_values}","messagePattern":"Invalid effort\\. Allowed values: (.+?)","errorType":"http","errorClass":"HTTPException","httpStatus":400,"severity":"error","filePath":"mineru/cli/api_request.py","lineNumber":81,"sourceCode":"            ),\n        )\n    return parse_method\n\n\ndef validate_parse_backend(backend: str) -> str:\n    \"\"\"校验公开 API 允许的解析后端，避免旧入口名进入下游执行链路。\"\"\"\n    try:\n        return validate_public_backend(backend)\n    except ValueError as exc:\n        raise HTTPException(status_code=400, detail=str(exc)) from exc\n\n\ndef validate_parse_effort(effort: str) -> str:\n    \"\"\"校验公开 API 允许的 hybrid effort，避免非法值进入解析链路。\"\"\"\n    try:\n        return validate_public_effort(effort)\n    except ValueError as exc:\n        raise HTTPException(status_code=400, detail=str(exc)) from exc\n\n\ndef validate_parse_lang_list(lang_list: list[str]) -> list[str]:\n    \"\"\"校验公开 API 允许的 OCR 语言列表，避免旧语言入口进入解析链路。\"\"\"\n    try:\n        return validate_public_ocr_lang_list(lang_list)\n    except ValueError as exc:\n        raise HTTPException(status_code=400, detail=str(exc)) from exc\n\n\nasync def parse_request_form(\n    request: Request,\n    files: Annotated[\n        list[UploadFile],\n        File(\n            description=\"Upload PDF, image, DOCX, PPTX, or XLSX files for parsing\",\n            json_schema_extra=SWAGGER_UI_FILE_ARRAY_SCHEMA_EXTRA,\n        ),","sourceCodeStart":63,"sourceCodeEnd":99,"githubUrl":"https://github.com/opendatalab/MinerU/blob/4fe4bde114a23ee5dd637eae99b767f4669bf58c/mineru/cli/api_request.py#L63-L99","documentation":"HTTP 400 raised by validate_parse_effort(): hybrid backends accept an effort parameter restricted to HYBRID_EFFORT_CHOICES = ('medium','high'). Anything else — 'low', 'max', 'MEDIUM', 'auto' — is rejected before parsing starts.","triggerScenarios":"POSTing backend=hybrid-engine (or hybrid-http-client) with parse_effort='low' or 'fast'; omitting effort is fine (medium is the default) but an explicit invalid string fails.","commonSituations":"Users assuming an auto/low tier exists because other LLM tools expose it; case-sensitive values copied from docs with capitalized words; configs from versions that once accepted more tiers.","solutions":["Use 'medium' or 'high' exactly (lowercase)","Or omit the effort parameter entirely to get the default 'medium'","Check HYBRID_EFFORT_CHOICES in backend_options.py if running an unreleased fork — choices may differ","For lighter runs, prefer effort=medium over invented 'low' values"],"exampleFix":"# before\ndata = {'backend': 'hybrid-engine', 'parse_effort': 'low'}\n\n# after\ndata = {'backend': 'hybrid-engine', 'parse_effort': 'medium'}","handlingStrategy":"validation","validationCode":"from mineru.cli.backend_options import HYBRID_EFFORT_CHOICES  # ('medium','high')\n\neffort = (effort or \"medium\").strip().lower()\nassert effort in HYBRID_EFFORT_CHOICES, f\"effort must be one of {HYBRID_EFFORT_CHOICES}\"","typeGuard":"def is_valid_effort(v: str | None) -> bool:\n    return v is None or (isinstance(v, str) and v.strip().lower() in {\"medium\", \"high\"})","tryCatchPattern":"try:\n    resp = requests.post(url, files=files, data={\"backend\": b, \"parse_effort\": effort}, timeout=60)\n    resp.raise_for_status()\nexcept requests.HTTPError as e:\n    if e.response.status_code == 400 and \"effort\" in e.response.text:\n        data.pop(\"parse_effort\")  # omit and use server default\n        resp = requests.post(url, files=files, data=data, timeout=60)\n    else:\n        raise","preventionTips":["Omit effort unless you specifically need 'high' — 'medium' is the default","Normalize casing before sending","Re-check HYBRID_EFFORT_CHOICES after mineru upgrades"],"tags":["api","http-400","validation","hybrid","effort"],"backgroundTag":null,"analyzedSha":"4fe4bde114a23ee5dd637eae99b767f4669bf58c","analyzedAt":"2026-08-14T21:29:18.456Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}