PDF Parser for AI-ready data. Automate PDF accessibility. Open-source.
This report presents the forensic synthetic code analysis of opendataloader-project/opendataloader-pdf, a Java project with 27,116 GitHub stars. SynthScan v2.0 examined 70,728 lines of code across 306 source files, recording 368 pattern matches distributed across 17 syntactic categories. The overall adjusted score of 10.8 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 368 distinct pattern matches across 17 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | verification/ci-verify.py | 26 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 28 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 31 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 33 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 57 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 62 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 69 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 71 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 91 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 93 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 97 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 99 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 159 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 161 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 235 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 237 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 260 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 262 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 322 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 324 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 663 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 671 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 828 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 830 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 839 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 841 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 981 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 983 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 989 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 991 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 1000 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 1002 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 1010 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 1012 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 1228 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 1230 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 1240 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 1242 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 1490 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 1492 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 1499 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 1501 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 1508 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 1510 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 1516 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | verification/ci-verify.py | 1518 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | verification/ci-verify.py | 137 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | verification/ci-verify.py | 139 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | verification/ci-verify.py | 356 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | verification/ci-verify.py | 358 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | verification/ci-verify.py | 377 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | verification/ci-verify.py | 379 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | verification/ci-verify.py | 440 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | verification/ci-verify.py | 456 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | verification/ci-verify.py | 489 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | verification/ci-verify.py | 491 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | verification/ci-verify.py | 513 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | verification/ci-verify.py | 520 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | verification/ci-verify.py | 608 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | verification/ci-verify.py | 615 | # --------------------------------------------------------------------------- | COMMENT |
| 54 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | …taloader/pdf/hybrid/HancomAISchemaTransformerTest.java | 1246 | assertThat(c.getBoundingBox().getLeftX()).isEqualTo(expectedLeft, org.assertj.core.api.Assertions.within(0.01)); | CODE |
| CRITICAL⚡ | …taloader/pdf/hybrid/HancomAISchemaTransformerTest.java | 1247 | assertThat(c.getBoundingBox().getRightX()).isEqualTo(expectedRight, org.assertj.core.api.Assertions.within(0.01) | CODE |
| CRITICAL⚡ | …taloader/pdf/hybrid/HancomAISchemaTransformerTest.java | 1248 | assertThat(c.getBoundingBox().getTopY()).isEqualTo(expectedTopY, org.assertj.core.api.Assertions.within(0.01)); | CODE |
| CRITICAL⚡ | …taloader/pdf/hybrid/HancomAISchemaTransformerTest.java | 1249 | assertThat(c.getBoundingBox().getBottomY()).isEqualTo(expectedBottomY, org.assertj.core.api.Assertions.within(0. | CODE |
| CRITICAL | …ava/org/opendataloader/pdf/hybrid/OcrStrategyTest.java | 257 | assertThat(word.getBbox().getLeftX()).isCloseTo(24.0, org.assertj.core.api.Assertions.within(0.01)); | CODE |
| CRITICAL | …ava/org/opendataloader/pdf/hybrid/OcrStrategyTest.java | 258 | assertThat(word.getBbox().getRightX()).isCloseTo(72.0, org.assertj.core.api.Assertions.within(0.01)); | CODE |
| CRITICAL | …g/opendataloader/pdf/processors/DocumentProcessor.java | 635 | // org.verapdf.gf.model.impl.containers.StaticContainers.setFlavour(Collections.singletonList(PDFAFlavour.WCAG_2_ | COMMENT |
| CRITICAL | …g/opendataloader/pdf/processors/DocumentProcessor.java | 719 | org.verapdf.gf.model.impl.containers.StaticContainers.clearAllContainers(); | CODE |
| CRITICAL | …main/java/org/opendataloader/pdf/api/OutputWriter.java | 40 | * org.opendataloader.pdf.processors.DocumentProcessor.extractContents( | COMMENT |
| CRITICAL | …perpowers/plans/2026-04-29-hybrid-hancom-ai-options.md | 833 | org.opendataloader.pdf.cli.CLIOptions.addAllTo(options); | CODE |
| CRITICAL | …perpowers/plans/2026-04-29-hybrid-hancom-ai-options.md | 879 | org.opendataloader.pdf.cli.CLIOptions.applyAllTo(coreConfig, cmd); | CODE |
| CRITICAL | …perpowers/plans/2026-04-29-hybrid-hancom-ai-options.md | 929 | if (org.opendataloader.pdf.api.Config.HYBRID_OFF.equals(c.getHybrid())) { | CODE |
| CRITICAL | …perpowers/plans/2026-04-29-hybrid-hancom-ai-options.md | 935 | if (org.opendataloader.pdf.api.Config.HYBRID_MODE_AUTO.equals(c.getHybridConfig().getMode())) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …n/opendataloader-pdf/tests/test_convert_integration.py | 6 | def test_convert_generates_output(input_pdf, output_dir): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 47 | def test_defaults_preserve_prior_behavior(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 56 | def test_disable_ocr_sets_do_ocr_false(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 62 | def test_ocr_engine_tesseract_yields_tesseract_options(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 70 | def test_ocr_engine_rapidocr_yields_rapidocr_options(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 78 | def test_force_full_page_ocr_propagates_to_engine_options(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 86 | def test_ocr_lang_overrides_engine_default(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 94 | def test_psm_is_applied_to_tesseract(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 100 | def test_psm_is_ignored_for_non_tesseract_engines(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 107 | def test_ocr_engine_auto_yields_auto_options(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 115 | def test_unknown_engine_raises_value_error_with_clear_message(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 228 | def test_engine_check_easyocr_always_ok(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 235 | def test_engine_check_auto_always_ok(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 242 | def test_engine_check_unknown_kind_returns_false(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 257 | def test_engine_check_tesseract_missing_binary(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 266 | def test_engine_check_tesseract_present(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 274 | def test_engine_check_tesserocr_missing_package(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 283 | def test_engine_check_rapidocr_missing_package(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 292 | def test_engine_check_rapidocr_missing_onnxruntime(): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 374 | def test_no_ocr_no_warning_when_engine_left_default(monkeypatch, caplog): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 382 | def test_no_ocr_warns_when_ocr_lang_set(monkeypatch, caplog): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 389 | def test_no_ocr_warns_when_psm_set(monkeypatch, caplog): | CODE |
| LOW⚡ | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 396 | def test_no_ocr_alone_emits_no_warning(monkeypatch, caplog): | CODE |
| LOW | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 26 | def _capture_pipeline_options(**kwargs): | CODE |
| LOW | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 129 | def test_create_converter_rejects_denylisted_engine(): | CODE |
| LOW | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 186 | def test_argparse_no_ocr_and_force_ocr_are_mutually_exclusive(): | CODE |
| LOW | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 194 | def test_argparse_kserve_engine_is_rejected(): | CODE |
| LOW | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 213 | def test_argparse_psm_accepted_as_integer(): | CODE |
| LOW | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 306 | def test_engine_check_ocrmac_off_macos(): | CODE |
| LOW | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 314 | def test_engine_check_ocrmac_on_macos_missing_package(): | CODE |
| LOW | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 352 | def test_no_ocr_warns_when_engine_explicitly_set(monkeypatch, caplog): | CODE |
| LOW | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 361 | def test_no_ocr_warns_when_engine_explicitly_set_to_easyocr(monkeypatch, caplog): | CODE |
| LOW | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 409 | def test_main_exits_when_tesseract_binary_missing(monkeypatch, caplog): | CODE |
| LOW | …dataloader-pdf/tests/test_hybrid_server_ocr_options.py | 428 | def test_main_skips_engine_check_when_no_ocr(monkeypatch, caplog): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 32 | def test_partial_success_status(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 45 | def test_partial_success_multiple_failed_pages(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 60 | def test_partial_success_no_page_range_with_total_pages(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 74 | def test_partial_success_no_page_range_fallback(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 86 | def test_success_no_errors_field(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 97 | def test_document_field_present(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 109 | def test_partial_success_first_page_failed_with_page_range(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 120 | def test_partial_success_last_page_failed_with_page_range(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 131 | def test_partial_success_all_pages_failed(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 143 | def test_partial_success_all_pages_failed_with_total_pages(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 156 | def test_failure_status_no_failed_pages_detection(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 168 | def test_partial_success_missing_pages_key(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 184 | def test_std_bad_alloc_errors(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 222 | def test_failed_pages_with_empty_entries_in_pages_dict(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 233 | def test_boundary_pages_detected_via_errors(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 245 | def test_both_strategies_combined(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 260 | def test_overlap_between_gap_and_error_is_deduplicated(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 271 | def test_duplicate_page_in_errors(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 279 | def test_no_page_pattern_errors_falls_back_to_gap(self): | CODE |
| LOW | …loader-pdf/tests/test_hybrid_server_partial_success.py | 290 | def test_empty_errors_with_partial_success(self): | CODE |
| LOW | python/opendataloader-pdf/tests/test_runner.py | 41 | def test_streaming_failure_does_not_duplicate_output(monkeypatch, capsys, patched_jar): | CODE |
| LOW | python/opendataloader-pdf/tests/test_runner.py | 69 | def test_quiet_success_relays_stdout_but_not_stderr(monkeypatch, capsys, patched_jar): | CODE |
| LOW | python/opendataloader-pdf/tests/test_runner.py | 94 | def test_quiet_relays_through_stdout_buffer_byte_path(monkeypatch, patched_jar): | CODE |
| LOW | python/opendataloader-pdf/tests/test_runner.py | 131 | def test_quiet_failure_prints_captured_streams_once(monkeypatch, capsys, patched_jar): | CODE |
| LOW | …er-pdf/tests/test_hybrid_server_picture_description.py | 22 | def _capture_pipeline_options(**kwargs): | CODE |
| LOW | …er-pdf/tests/test_hybrid_server_picture_description.py | 43 | def test_custom_prompt_is_forwarded_to_vlm_options(): | CODE |
| 59 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/hybrid/experiments/speed/subprocess_results.json | 35 | "markdown": "where soas below some threshold cannot be recovered, so that an observer can only guess about order.$ | CODE |
| MEDIUM | docs/hybrid/experiments/speed/subprocess_results.json | 658 | "markdown": "This book's approach is premised on a simple assumption: because behavioral economics is foremost a | CODE |
| MEDIUM | docs/hybrid/experiments/speed/subprocess_results.json | 1043 | "markdown": "<!-- image -->\n\n<!-- image -->\n\norganizations to navigate successfully the global digital economy | CODE |
| MEDIUM | docs/hybrid/experiments/speed/subprocess_results.json | 1267 | "markdown": "## Promotional Materials\n\nA good promotional strategy should include multiple facets, from | CODE |
| MEDIUM | docs/hybrid/experiments/speed/subprocess_results.json | 1274 | "markdown": "Figure 12.2. A set of open textbooks printed in bulk are featured in this photo. Open textbooks from | CODE |
| MEDIUM | docs/hybrid/experiments/speed/subprocess_results.json | 1323 | "markdown": "Figure 1: Depth up-scaling for the case with n = 32 , s = 48 , and m = 8 . Depth up-scaling is achiev | CODE |
| MEDIUM | docs/hybrid/experiments/speed/subprocess_results.json | 1337 | "markdown": "Table 2: Evaluation results for SOLAR 10.7B and SOLAR 10.7B-Instruct along with other top-performing | CODE |
| MEDIUM | docs/hybrid/experiments/speed/subprocess_results.json | 1344 | "markdown": "| Model | Alpaca-GPT4 | OpenOrca | Synth. Math-Instruct | H6 (Avg.) | ARC | HellaSw | CODE |
| MEDIUM | docs/hybrid/experiments/speed/subprocess_results.json | 1358 | "markdown": "## Acknowledgements\n\nWe would like to extend our gratitude to the teams at Hugging Face, particular | CODE |
| MEDIUM | docs/hybrid/experiments/speed/subprocess_results.json | 1358 | "markdown": "## Acknowledgements\n\nWe would like to extend our gratitude to the teams at Hugging Face, particular | CODE |
| MEDIUM⚡ | docs/hybrid/experiments/speed/subprocess_results.json | 1386 | "markdown": "## A Contributions\n\nThe contributions of this study are as follows:\n\n- Introduction of the SOLAR | CODE |
| MEDIUM⚡ | docs/hybrid/experiments/speed/subprocess_results.json | 1386 | "markdown": "## A Contributions\n\nThe contributions of this study are as follows:\n\n- Introduction of the SOLAR | CODE |
| MEDIUM⚡ | docs/hybrid/experiments/speed/subprocess_results.json | 1393 | "markdown": "plexity when compared to MoE. This shift in approach offers a unique and more straightforward way of | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …on/opendataloader-pdf/src/opendataloader_pdf/runner.py | 91 | print("Error running opendataloader-pdf CLI.", file=sys.stderr) | CODE |
| LOW | …dataloader-pdf/src/opendataloader_pdf/hybrid_server.py | 159 | except Exception: | CODE |
| LOW | …dataloader-pdf/src/opendataloader_pdf/hybrid_server.py | 700 | except Exception as e: | CODE |
| LOW | …dataloader-pdf/src/opendataloader_pdf/hybrid_server.py | 794 | except Exception as e: | CODE |
| MEDIUM | …ents/chunking_strategy/docling_page_range_benchmark.py | 215 | print(f"Error: PDF not found at {pdf_path}") | CODE |
| LOW⚡ | verification/ci-verify.py | 154 | except Exception as exc: | CODE |
| LOW⚡ | verification/ci-verify.py | 230 | except Exception as exc: | CODE |
| LOW⚡ | verification/ci-verify.py | 255 | except Exception as exc: | CODE |
| LOW⚡ | verification/ci-verify.py | 317 | except Exception as exc: | CODE |
| LOW | verification/ci-verify.py | 198 | except Exception as exc: | CODE |
| LOW | verification/ci-verify.py | 214 | except Exception as exc: | CODE |
| LOW | verification/ci-verify.py | 402 | except Exception as exc: | CODE |
| LOW | scripts/experiments/docling_baseline_bench.py | 87 | except Exception as e: | CODE |
| LOW | scripts/experiments/docling_fastapi_bench.py | 100 | except Exception: | CODE |
| LOW | scripts/experiments/docling_fastapi_bench.py | 193 | except Exception as e: | CODE |
| LOW | scripts/experiments/docling_subprocess_bench.py | 103 | except Exception as e: | CODE |
| LOW | scripts/experiments/docling_subprocess_bench.py | 114 | except Exception as e: | CODE |
| LOW | scripts/experiments/docling_subprocess_bench.py | 231 | except Exception as e: | STRING |
| LOW | build-scripts/fetch_shaded_jar.py | 44 | except Exception: | CODE |
| MEDIUM⚡ | build-scripts/set_version.py | 36 | print(f"Error: VERSION file not found at {version_path}") | CODE |
| MEDIUM⚡ | build-scripts/set_version.py | 39 | print(f"Error: Java pom.xml not found at {java_pom_path}") | CODE |
| MEDIUM⚡ | build-scripts/set_version.py | 42 | print(f"Error: Python pyproject.toml not found at {python_pyproject_path}") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …java/org/opendataloader/pdf/hybrid/HancomAIClient.java | 203 | // Step 1: DLA + OCR. This is required — downstream steps have nothing | COMMENT |
| LOW | …java/org/opendataloader/pdf/hybrid/HancomAIClient.java | 216 | // Step 2: Table Structure — crop each Table region from page image, send to TSR individually | COMMENT |
| LOW | …java/org/opendataloader/pdf/hybrid/HancomAIClient.java | 230 | // Step 3: Figure captioning — pdf2img → crop figures → caption each | COMMENT |
| LOW⚡ | …n/java/org/opendataloader/pdf/hybrid/HancomClient.java | 133 | // Step 1: Upload PDF | COMMENT |
| LOW⚡ | …n/java/org/opendataloader/pdf/hybrid/HancomClient.java | 137 | // Step 2: Get visual info | COMMENT |
| LOW⚡ | …n/java/org/opendataloader/pdf/hybrid/HancomClient.java | 143 | // Step 3: Always cleanup | COMMENT |
| LOW | scripts/bench.sh | 46 | # Step 1: Build Java if needed | COMMENT |
| LOW⚡ | scripts/bench.sh | 57 | # Step 2: Clone or update bench repo | COMMENT |
| LOW⚡ | scripts/bench.sh | 66 | # Step 3: Find JAR path | COMMENT |
| LOW⚡ | scripts/bench.sh | 73 | # Step 4: Run benchmark with JAR | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …java/org/opendataloader/pdf/hybrid/HancomAIClient.java | 203 | // Step 1: DLA + OCR. This is required — downstream steps have nothing | COMMENT |
| LOW | …java/org/opendataloader/pdf/hybrid/HancomAIClient.java | 216 | // Step 2: Table Structure — crop each Table region from page image, send to TSR individually | COMMENT |
| LOW | …java/org/opendataloader/pdf/hybrid/HancomAIClient.java | 230 | // Step 3: Figure captioning — pdf2img → crop figures → caption each | COMMENT |
| LOW⚡ | …n/java/org/opendataloader/pdf/hybrid/HancomClient.java | 133 | // Step 1: Upload PDF | COMMENT |
| LOW⚡ | …n/java/org/opendataloader/pdf/hybrid/HancomClient.java | 137 | // Step 2: Get visual info | COMMENT |
| LOW⚡ | …n/java/org/opendataloader/pdf/hybrid/HancomClient.java | 143 | // Step 3: Always cleanup | COMMENT |
| LOW | scripts/bench.sh | 46 | # Step 1: Build Java if needed | COMMENT |
| LOW⚡ | scripts/bench.sh | 57 | # Step 2: Clone or update bench repo | COMMENT |
| LOW⚡ | scripts/bench.sh | 66 | # Step 3: Find JAR path | COMMENT |
| LOW⚡ | scripts/bench.sh | 73 | # Step 4: Run benchmark with JAR | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …loader/pdf/processors/TextDecorationProcessorTest.java | 201 | Assertions.assertTrue(chunk1.getIsStrikethroughText(), | COMMENT |
| LOW | …loader/pdf/processors/TextDecorationProcessorTest.java | 301 | TextChunk textChunk = new TextChunk(new BoundingBox(0, 10.0, 100.0, 60.0, 120.0), | COMMENT |
| LOW | …loader/pdf/processors/TextDecorationProcessorTest.java | 321 | // | COMMENT |
| LOW | …loader/pdf/processors/TextDecorationProcessorTest.java | 341 | // TextChunk textChunk = new TextChunk(new BoundingBox(0, 10.0, 100.0, 60.0, 120.0), | COMMENT |
| LOW | …loader/pdf/processors/TextDecorationProcessorTest.java | 361 | // | COMMENT |
| LOW | …loader/pdf/processors/TextDecorationProcessorTest.java | 481 | // | COMMENT |
| LOW | …ndataloader/pdf/processors/ParagraphProcessorTest.java | 61 | * {`@code` detectTwoLinesParagraphs}), the right-alignment pass must claim the blocks first, | COMMENT |
| LOW | …rg/opendataloader/pdf/processors/CaptionProcessor.java | 81 | imageNode.setRecognizedStructureId(content.getRecognizedStructureId()); | COMMENT |
| LOW | …g/opendataloader/pdf/processors/DocumentProcessor.java | 361 | } | COMMENT |
| LOW | …endataloader/pdf/processors/ClusterTableProcessor.java | 101 | //// SemanticTextNode semanticTextNode = new SemanticTextNode((TextChunk)chunk); | COMMENT |
| LOW | …pendataloader/pdf/processors/AutoTaggingProcessor.java | 741 | private static void createFootnoteStructElem(SemanticFootnote footnote, COSObject parent, COSDocument cosDocument) { | COMMENT |
| LOW | …pendataloader/pdf/processors/AutoTaggingProcessor.java | 781 | double[] bbox = {image.getLeftX(), image.getBottomY(), image.getRightX(), image.getTopY()}; | COMMENT |
| LOW | …ava/org/opendataloader/pdf/hybrid/TriageProcessor.java | 681 | return TriageResult.backend(pageNumber, 0.85, signals); | COMMENT |
| LOW | verification/ci-verify.py | 441 | # Hybrid mode behavior — fail-fast contract | COMMENT |
| LOW | verification/ci-verify.py | 601 | # 7. Invalid option → non-zero exit (POSIX convention is 2; we only | COMMENT |
| LOW | verification/ci-verify.py | 741 | COMMENT | |
| LOW | scripts/run-cli.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/bench.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/build-all.sh | 1 | #!/bin/bash | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 482 | ### What is the best PDF parser for RAG? | COMMENT |
| MEDIUM | README.md | 536 | ### How do I chunk PDFs for RAG? | COMMENT |
| MEDIUM | README.md | 540 | ### How do I cite PDF sources in RAG answers? | COMMENT |
| MEDIUM⚡ | docs/hybrid/experiments/speed/subprocess_results.json | 1393 | "markdown": "plexity when compared to MoE. This shift in approach offers a unique and more straightforward way of | CODE |
| MEDIUM | examples/python/rag/README.md | 1 | # RAG Examples for OpenDataLoader PDF | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | python/opendataloader-pdf/tests/test_hybrid_server.py | 4 | CODE | |
| LOW | …opendataloader-pdf/tests/test_hybrid_server_unicode.py | 10 | CODE | |
| LOW | python/opendataloader-pdf/tests/test_cli_options.py | 3 | CODE | |
| LOW | …n/opendataloader-pdf/src/opendataloader_pdf/wrapper.py | 9 | CODE | |
| LOW | …/opendataloader-pdf/src/opendataloader_pdf/__init__.py | 1 | CODE | |
| LOW | …/opendataloader-pdf/src/opendataloader_pdf/__init__.py | 1 | CODE | |
| LOW | …/opendataloader-pdf/src/opendataloader_pdf/__init__.py | 1 | CODE | |
| LOW | …dataloader-pdf/src/opendataloader_pdf/hybrid_server.py | 292 | CODE | |
| LOW | …dataloader-pdf/src/opendataloader_pdf/hybrid_server.py | 296 | CODE | |
| LOW | …r-pdf-core/src/test/resources/generate-cid-test-pdf.py | 26 | CODE | |
| LOW | …ents/chunking_strategy/docling_page_range_benchmark.py | 17 | CODE | |
| LOW | examples/python/batch/batch_processing.py | 16 | CODE | |
| LOW | scripts/experiments/docling_fastapi_bench.py | 46 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | python/opendataloader-pdf/tests/test_hybrid_server.py | 8 | CODE | |
| LOW | python/opendataloader-pdf/tests/test_hybrid_server.py | 38 | CODE | |
| LOW | python/opendataloader-pdf/tests/test_hybrid_server.py | 57 | CODE | |
| LOW | …on/opendataloader-pdf/src/opendataloader_pdf/runner.py | 13 | CODE | |
| LOW | …dataloader-pdf/src/opendataloader_pdf/hybrid_server.py | 165 | CODE | |
| LOW | …dataloader-pdf/src/opendataloader_pdf/hybrid_server.py | 807 | CODE | |
| LOW | …r-pdf-core/src/test/resources/generate-cid-test-pdf.py | 53 | CODE | |
| LOW | verification/ci-verify.py | 273 | CODE | |
| LOW | verification/ci-verify.py | 522 | CODE | |
| LOW | verification/ci-verify.py | 832 | CODE | |
| LOW | examples/python/rag/basic_chunking.py | 63 | CODE | |
| LOW | scripts/experiments/docling_subprocess_bench.py | 165 | CODE | |
| LOW | build-scripts/fetch_shaded_jar.py | 19 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/hybrid/research/docling-openapi.json | 1 | {"openapi":"3.1.0","info":{"title":"Docling Serve","version":"1.9.0"},"paths":{"/openapi-3.0.json":{"get":{"summary":"Op | CODE |
| LOW⚡ | samples/json/lorem.json | 18 | "content" : "Lorem Ipsum" | CODE |
| LOW⚡ | samples/json/lorem.json | 27 | "content" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et | CODE |
| LOW⚡ | samples/json/lorem.json | 27 | "content" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et | CODE |
| LOW | verification/ci-verify.py | 763 | ("email", "alice.smith@example.org", "email@example.com"), | CODE |
| LOW | node/opendataloader-pdf/test/executeJar.unit.test.ts | 71 | await expect(promise).resolves.toBe('Lorem ipsum dolor'); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …n/opendataloader-pdf/src/opendataloader_pdf/wrapper.py | 16 | CODE | |
| LOW | …dataloader-pdf/src/opendataloader_pdf/hybrid_server.py | 388 | CODE | |
| LOW | …dataloader-pdf/src/opendataloader_pdf/hybrid_server.py | 515 | CODE | |
| LOW | …loader-pdf/src/opendataloader_pdf/convert_generated.py | 12 | CODE | |
| LOW | …ataloader-pdf-mcp/src/opendataloader_pdf_mcp/server.py | 15 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …n/opendataloader-pdf/src/opendataloader_pdf/wrapper.py | 12 | __all__ = ["convert", "run", "run_jar", "main"] | CODE |
| LOW | …/opendataloader-pdf/src/opendataloader_pdf/__init__.py | 3 | __all__ = ["run", "convert", "run_jar"] | CODE |
| LOW | …dataloader-pdf/src/opendataloader_pdf/hybrid_server.py | 81 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/hybrid/experiments/speed/subprocess_results.json | 840 | "markdown": "## Saccharometer DI Water Glucose Solution Yeast Suspension\n\n| 24 ml | 0 ml | 4 ml |\n|------ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/run-cli.sh | 22 | # Check if Java is installed | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/bench.sh | 6 | # Usage: | COMMENT |