{"record":{"id":"0335bb551a9d2913","repo":"opendataloader-project/opendataloader-pdf","slug":"unsupported-hybrid-backend-s-supported-values-0335bb","errorCode":null,"errorMessage":"Unsupported hybrid backend '%s'. Supported values: %s","messagePattern":"Unsupported hybrid backend '(.+?)'\\. 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":660,"sourceCode":"                if (!format.isEmpty()) {\n                    values.add(format);\n                }\n            }\n        }\n        return values;\n    }\n\n    private static void applyHybridOptions(Config config, CommandLine commandLine) {\n        if (commandLine.hasOption(HYBRID_LONG_OPTION)) {\n            String hybridValue = commandLine.getOptionValue(HYBRID_LONG_OPTION);\n            if (hybridValue == null || hybridValue.trim().isEmpty()) {\n                throw new IllegalArgumentException(\n                        String.format(\"Option --hybrid requires a value. Supported values: %s\",\n                                Config.getHybridOptions(\", \")));\n            }\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            }","sourceCodeStart":642,"sourceCodeEnd":678,"githubUrl":"https://github.com/opendataloader-project/opendataloader-pdf/blob/a7789b8e77dd05e2b8659eb3ea12fc458f80bfb8/java/opendataloader-pdf-core/src/main/java/org/opendataloader/pdf/api/cli/CLIOptions.java#L642-L678","documentation":"Thrown when --hybrid receives a non-empty value not in the hybrid backend domain. The value is trimmed and lowercased, then checked via Config.isValidHybrid against {off, docling, docling-fast, hancom, hancom-ai} (azure/google are reserved but not registered until implemented). Any other string is rejected with the bad value and the live supported list.","triggerScenarios":"Pass `--hybrid azure` or `--hybrid google` (not yet implemented, so not in the valid set), a typo like `hancomai` (missing hyphen), or `--hybrid doclings`.","commonSituations":"Trying a backend before its integration is shipped (azure/google); dropping the hyphen in hancom-ai; using the deprecated docling-fast alias works but is discouraged.","solutions":["Use one of the registered backends: off, docling, docling-fast, hancom, hancom-ai.","Mind the hyphen in hancom-ai.","Confirm the backend you want is implemented in your version (check the error's listed values)."],"exampleFix":"// before\nopendataloader-pdf doc.pdf --hybrid azure\n// after\nopendataloader-pdf doc.pdf --hybrid hancom-ai","handlingStrategy":"type-guard","validationCode":"String h = userValue.trim().toLowerCase(Locale.ROOT);\nif (!Config.isValidHybrid(h)) {\n    throw new IllegalArgumentException(\n        \"Unsupported hybrid backend '\" + userValue + \"'. Use: \" + Config.getHybridOptions(\", \"));\n}","typeGuard":"boolean isAcceptableHybrid(String v) {\n    return v != null && Config.isValidHybrid(v.trim().toLowerCase(Locale.ROOT));\n}","tryCatchPattern":"try {\n    config.setHybrid(h);\n} catch (IllegalArgumentException e) {\n    config.setHybrid(Config.HYBRID_OFF);\n}","preventionTips":["Mind the hyphen in hancom-ai.","azure/google are reserved names not yet registered — check the error's listed values for your version.","Lowercase via Locale.ROOT before validating."],"tags":["cli","hybrid","validation","enum-value"],"backgroundTag":null,"analyzedSha":"a7789b8e77dd05e2b8659eb3ea12fc458f80bfb8","analyzedAt":"2026-08-14T05:22:03.953Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}