{"record":{"id":"f2ea22e276059a7e","repo":"opendataloader-project/opendataloader-pdf","slug":"unsupported-hybrid-mode-s-supported-values-s","errorCode":null,"errorMessage":"Unsupported hybrid mode '%s'. Supported values: %s","messagePattern":"Unsupported hybrid mode '(.+?)'\\. Supported values: (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"java/opendataloader-pdf-core/src/main/java/org/opendataloader/pdf/api/cli/CLIOptions.java","lineNumber":675,"sourceCode":"            }\n            String hybrid = hybridValue.trim().toLowerCase(Locale.ROOT);\n            if (!Config.isValidHybrid(hybrid)) {\n                throw new IllegalArgumentException(\n                        String.format(\"Unsupported hybrid backend '%s'. Supported values: %s\",\n                                hybrid, Config.getHybridOptions(\", \")));\n            }\n            config.setHybrid(hybrid);\n        }\n        if (commandLine.hasOption(HYBRID_MODE_LONG_OPTION)) {\n            String modeValue = commandLine.getOptionValue(HYBRID_MODE_LONG_OPTION);\n            if (modeValue == null || modeValue.trim().isEmpty()) {\n                throw new IllegalArgumentException(\n                        String.format(\"Option --hybrid-mode requires a value. Supported values: %s\",\n                                Config.getHybridModeOptions(\", \")));\n            }\n            String mode = modeValue.trim().toLowerCase(Locale.ROOT);\n            if (!Config.isValidHybridMode(mode)) {\n                throw new IllegalArgumentException(\n                        String.format(\"Unsupported hybrid mode '%s'. Supported values: %s\",\n                                mode, Config.getHybridModeOptions(\", \")));\n            }\n            config.getHybridConfig().setMode(mode);\n        }\n        if (commandLine.hasOption(HYBRID_OCR_LONG_OPTION)) {\n            // Deprecated: OCR settings are now configured on the hybrid server\n            System.err.println(\"Warning: --hybrid-ocr is deprecated. \"\n                    + \"Configure OCR settings on the hybrid server instead (--ocr-lang, --force-ocr).\");\n        }\n        if (commandLine.hasOption(HYBRID_URL_LONG_OPTION)) {\n            String url = commandLine.getOptionValue(HYBRID_URL_LONG_OPTION);\n            if (url != null && !url.trim().isEmpty()) {\n                config.getHybridConfig().setUrl(url.trim());\n            }\n        }\n        if (commandLine.hasOption(HYBRID_TIMEOUT_LONG_OPTION)) {\n            String timeoutValue = commandLine.getOptionValue(HYBRID_TIMEOUT_LONG_OPTION);","sourceCodeStart":657,"sourceCodeEnd":693,"githubUrl":"https://github.com/opendataloader-project/opendataloader-pdf/blob/a7789b8e77dd05e2b8659eb3ea12fc458f80bfb8/java/opendataloader-pdf-core/src/main/java/org/opendataloader/pdf/api/cli/CLIOptions.java#L657-L693","documentation":"Thrown when --hybrid-mode receives a non-empty value not in {auto, full}. The value is trimmed and lowercased, then checked via Config.isValidHybridMode. Any other string is rejected with the bad value and the dynamically generated supported list.","triggerScenarios":"Pass `--hybrid-mode smart`, `--hybrid-mode triage`, or a typo like `ful`. There are only two valid modes.","commonSituations":"Guessing a mode name; assuming a partial or all mode exists; typos.","solutions":["Use `auto` or `full`.","Use `full` to bypass triage and send every page to the backend.","Use `auto` (default) for dynamic triage."],"exampleFix":"// before\nopendataloader-pdf doc.pdf --hybrid hancom-ai --hybrid-mode smart\n// after\nopendataloader-pdf doc.pdf --hybrid hancom-ai --hybrid-mode full","handlingStrategy":"type-guard","validationCode":"String m = userValue.trim().toLowerCase(Locale.ROOT);\nif (!Config.isValidHybridMode(m)) {\n    throw new IllegalArgumentException(\n        \"Unsupported hybrid mode '\" + userValue + \"'. Use: \" + Config.getHybridModeOptions(\", \"));\n}","typeGuard":"boolean isAcceptableHybridMode(String v) {\n    return v != null && Config.isValidHybridMode(v.trim().toLowerCase(Locale.ROOT));\n}","tryCatchPattern":"try {\n    config.getHybridConfig().setMode(m);\n} catch (IllegalArgumentException e) {\n    config.getHybridConfig().setMode(Config.HYBRID_MODE_AUTO);\n}","preventionTips":["Only auto and full exist.","Lowercase via Locale.ROOT before validating to match the library.","Generate help text from Config.getHybridModeOptions."],"tags":["cli","hybrid-mode","validation","enum-value"],"backgroundTag":null,"analyzedSha":"a7789b8e77dd05e2b8659eb3ea12fc458f80bfb8","analyzedAt":"2026-08-14T05:22:03.953Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}