opendataloader-project/opendataloader-pdf · error · IllegalArgumentException
Unsupported hybrid mode '%s'. Supported values: %s
Error message
Unsupported hybrid mode '%s'. Supported values: %s
What it means
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.
Source
Thrown at java/opendataloader-pdf-core/src/main/java/org/opendataloader/pdf/api/cli/CLIOptions.java:675
}
String hybrid = hybridValue.trim().toLowerCase(Locale.ROOT);
if (!Config.isValidHybrid(hybrid)) {
throw new IllegalArgumentException(
String.format("Unsupported hybrid backend '%s'. Supported values: %s",
hybrid, Config.getHybridOptions(", ")));
}
config.setHybrid(hybrid);
}
if (commandLine.hasOption(HYBRID_MODE_LONG_OPTION)) {
String modeValue = commandLine.getOptionValue(HYBRID_MODE_LONG_OPTION);
if (modeValue == null || modeValue.trim().isEmpty()) {
throw new IllegalArgumentException(
String.format("Option --hybrid-mode requires a value. Supported values: %s",
Config.getHybridModeOptions(", ")));
}
String mode = modeValue.trim().toLowerCase(Locale.ROOT);
if (!Config.isValidHybridMode(mode)) {
throw new IllegalArgumentException(
String.format("Unsupported hybrid mode '%s'. Supported values: %s",
mode, Config.getHybridModeOptions(", ")));
}
config.getHybridConfig().setMode(mode);
}
if (commandLine.hasOption(HYBRID_OCR_LONG_OPTION)) {
// Deprecated: OCR settings are now configured on the hybrid server
System.err.println("Warning: --hybrid-ocr is deprecated. "
+ "Configure OCR settings on the hybrid server instead (--ocr-lang, --force-ocr).");
}
if (commandLine.hasOption(HYBRID_URL_LONG_OPTION)) {
String url = commandLine.getOptionValue(HYBRID_URL_LONG_OPTION);
if (url != null && !url.trim().isEmpty()) {
config.getHybridConfig().setUrl(url.trim());
}
}
if (commandLine.hasOption(HYBRID_TIMEOUT_LONG_OPTION)) {
String timeoutValue = commandLine.getOptionValue(HYBRID_TIMEOUT_LONG_OPTION);View on GitHub (pinned to a7789b8e77)
Solutions
- Use `auto` or `full`.
- Use `full` to bypass triage and send every page to the backend.
- Use `auto` (default) for dynamic triage.
Example fix
// before opendataloader-pdf doc.pdf --hybrid hancom-ai --hybrid-mode smart // after opendataloader-pdf doc.pdf --hybrid hancom-ai --hybrid-mode full
Defensive patterns
Strategy: type-guard
Validate before calling
String m = userValue.trim().toLowerCase(Locale.ROOT);
if (!Config.isValidHybridMode(m)) {
throw new IllegalArgumentException(
"Unsupported hybrid mode '" + userValue + "'. Use: " + Config.getHybridModeOptions(", "));
} Type guard
boolean isAcceptableHybridMode(String v) {
return v != null && Config.isValidHybridMode(v.trim().toLowerCase(Locale.ROOT));
} Try / catch
try {
config.getHybridConfig().setMode(m);
} catch (IllegalArgumentException e) {
config.getHybridConfig().setMode(Config.HYBRID_MODE_AUTO);
} Prevention
- Only auto and full exist.
- Lowercase via Locale.ROOT before validating to match the library.
- Generate help text from Config.getHybridModeOptions.
When it happens
Trigger: Pass `--hybrid-mode smart`, `--hybrid-mode triage`, or a typo like `ful`. There are only two valid modes.
Common situations: Guessing a mode name; assuming a partial or all mode exists; typos.
Related errors
- Unsupported image format '%s'. Supported values: png, jpeg
- Unsupported table method '%s'. Supported values: %s
- Unsupported value '%s'. Supported values: all, hidden-text,
- Unsupported format '%s'. Supported values: json, text, html,
- Unsupported hybrid backend '%s'. Supported values: %s
AI-assisted analysis of opendataloader-project/opendataloader-pdf@a7789b8e77 (2026-08-14).
Data as JSON: /api/errors/f2ea22e276059a7e.
Report an issue: GitHub.