A fast, helpful, and open-source document parser
This report presents the forensic synthetic code analysis of run-llama/liteparse, a Rust project with 11,525 GitHub stars. SynthScan v2.0 examined 48,563 lines of code across 180 source files, recording 281 pattern matches distributed across 16 syntactic categories. The overall adjusted score of 7.2 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 281 distinct pattern matches across 16 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 |
|---|---|---|---|---|
| LOW | crates/liteparse-python/src/lib.rs | 61 | #[pyo3(get)] | COMMENT |
| LOW | crates/liteparse-python/src/cli.rs | 41 | /// Extra header for OCR server requests, "Name: Value" (repeatable). | COMMENT |
| LOW | crates/liteparse-python/src/cli.rs | 61 | /// How to surface raster images in markdown output: `off`, `placeholder` | COMMENT |
| LOW | crates/liteparse-python/src/cli.rs | 101 | ocr_language: String, | COMMENT |
| LOW | crates/pdfium/src/struct_tree.rs | 1 | //! Walk the PDF structure tree (tagged-PDF tree) for a page. | COMMENT |
| LOW | crates/pdfium/src/library.rs | 21 | /// fn; its lock discipline is the caller's responsibility, not statically | COMMENT |
| LOW | crates/pdfium/src/library.rs | 41 | /// | COMMENT |
| LOW | crates/liteparse-wasm/src/wasi_stubs.rs | 1 | //! Stub implementations of libc functions that pdfium's statically-linked | COMMENT |
| LOW | crates/liteparse-napi/src/types.rs | 41 | /// Number of concurrent OCR workers (default: CPU cores - 1). | COMMENT |
| LOW | crates/liteparse-napi/src/types.rs | 281 | words: item.words.iter().map(JsWordBox::from_rust).collect(), | COMMENT |
| LOW | crates/liteparse/src/font_db_resolver.rs | 1 | //! Built-in [`GlyphResolver`] backed by a fragmented glyph-outline → unicode | COMMENT |
| LOW | crates/liteparse/src/types.rs | 41 | /// Whether the font has buggy encoding (private-use codepoints, TT subset, etc.) | COMMENT |
| LOW | crates/liteparse/src/types.rs | 61 | /// Target URI when this item falls inside a hyperlink annotation's | COMMENT |
| LOW | crates/liteparse/src/types.rs | 101 | /// Not emitted in JSON/text outputs — consumed by the markdown layout pass. | COMMENT |
| LOW | crates/liteparse/src/types.rs | 161 | pub regions: Region, | COMMENT |
| LOW | crates/liteparse/src/types.rs | 181 | #[serde(skip)] | COMMENT |
| LOW | crates/liteparse/src/types.rs | 281 | /// detection must use a wider margin over body for these lines. | COMMENT |
| LOW | crates/liteparse/src/types.rs | 301 | pub mcid: Option<i32>, | COMMENT |
| LOW | crates/liteparse/src/figure_cluster.rs | 1 | //! Figure-region clustering from page vector graphics. | COMMENT |
| LOW | crates/liteparse/src/figure_cluster.rs | 21 | /// Cluster two primitives when their bboxes overlap or are within this gap on | COMMENT |
| LOW | crates/liteparse/src/conversion.rs | 821 | assert!( | COMMENT |
| LOW | crates/liteparse/src/font_cmap.rs | 1 | //! Reverse-cmap recovery: parse an embedded sfnt (TrueType/OpenType) font | COMMENT |
| LOW | crates/liteparse/src/ocr_merge.rs | 41 | /// as the routing function learns to recommend heavier pipelines (tables, | COMMENT |
| LOW | crates/liteparse/src/ocr_merge.rs | 81 | pub text_length: usize, | COMMENT |
| LOW | crates/liteparse/src/ocr_merge.rs | 281 | dpi: f32, | COMMENT |
| LOW | crates/liteparse/src/ocr_merge.rs | 341 | COMMENT | |
| LOW | crates/liteparse/src/ocr_merge.rs | 641 | /// Returns one of 0.0, 90.0, 180.0, 270.0 — snapping to the nearest right | COMMENT |
| LOW | crates/liteparse/src/config.rs | 1 | use serde::{Deserialize, Serialize}; | COMMENT |
| LOW | crates/liteparse/src/config.rs | 21 | pub target_pages: Option<String>, | COMMENT |
| LOW | crates/liteparse/src/config.rs | 41 | /// Whether a systemic OCR failure (every OCR task failed *and* at least one | COMMENT |
| LOW | crates/liteparse/src/config.rs | 61 | /// skipped entirely (zero allocation). | COMMENT |
| LOW | crates/liteparse/src/config.rs | 81 | pub top: f32, | COMMENT |
| LOW | crates/liteparse/src/glyph_names.rs | 1 | //! PostScript glyph-name → Unicode resolution (Adobe Glyph List conventions). | COMMENT |
| LOW | crates/liteparse/src/extract.rs | 281 | println!("{}", serde_json::to_string(page)?); | COMMENT |
| LOW | crates/liteparse/src/extract.rs | 1161 | COMMENT | |
| LOW | crates/liteparse/src/extract.rs | 1181 | resolver: Option<&'a dyn crate::GlyphResolver>, | COMMENT |
| LOW | crates/liteparse/src/glyph_resolver.rs | 1 | //! Optional out-of-tree glyph recovery hook. | COMMENT |
| LOW | crates/liteparse/src/glyph_resolver.rs | 21 | /// for their keys to line up. | COMMENT |
| LOW | crates/liteparse/src/projection.rs | 1921 | }; | COMMENT |
| LOW | crates/liteparse/src/projection.rs | 3001 | COMMENT | |
| LOW | crates/liteparse/src/projection.rs | 3021 | const XY_T_DENS: f32 = 0.10; | COMMENT |
| LOW | crates/liteparse/src/projection.rs | 3041 | const XY_V_PREFERENCE_MARGIN: f32 = 1.1; | COMMENT |
| LOW | crates/liteparse/src/projection.rs | 3061 | /// Minimum smaller/larger ratio between the two column peaks' line counts. | COMMENT |
| LOW | crates/liteparse/src/projection.rs | 3381 | } | COMMENT |
| LOW | crates/liteparse/src/projection.rs | 3401 | /// | COMMENT |
| LOW | crates/liteparse/src/projection.rs | 3581 | let x_center = min_x + bucket_pt * (s as f32 + last_nonzero as f32 + 1.0) * 0.5; | COMMENT |
| LOW | crates/liteparse/src/projection.rs | 3621 | // page columns have exactly 2 dominant peaks (left edge of col 1, left | COMMENT |
| LOW | crates/liteparse/src/projection.rs | 3741 | // pages where any column has narrow text in many bands | COMMENT |
| LOW | crates/liteparse/src/projection.rs | 4121 | } | COMMENT |
| LOW | crates/liteparse/src/projection.rs | 4261 | eprintln!( | COMMENT |
| LOW | crates/liteparse/src/projection.rs | 4281 | // Fix: for histogram V-cuts, first measure how many y-bands have items | COMMENT |
| LOW | crates/liteparse/src/projection.rs | 4421 | // Banner cuts (score = ∞) at the page root are explicitly meant to | COMMENT |
| LOW | crates/liteparse/src/projection.rs | 4641 | if current.is_empty() { | COMMENT |
| LOW | crates/liteparse/src/main.rs | 101 | /// How to surface raster images in markdown output: | COMMENT |
| LOW | crates/liteparse/src/main.rs | 161 | COMMENT | |
| LOW | crates/liteparse/src/parser.rs | 61 | #[cfg(target_arch = "wasm32")] | COMMENT |
| LOW | crates/liteparse/src/markdown_layout/hr.rs | 1 | use crate::types::{GraphicPrimitive, ParsedPage}; | COMMENT |
| LOW | crates/liteparse/src/markdown_layout/classify.rs | 21 | use super::repetition::is_header_or_footer; | COMMENT |
| LOW | crates/liteparse/src/markdown_layout/classify.rs | 81 | let debug = *super::flags::DEBUG_MD; | COMMENT |
| LOW | crates/liteparse/src/markdown_layout/classify.rs | 481 | let mut state = FlowState::default(); | COMMENT |
| 51 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/bump-version.py | 35 | CODE | |
| LOW | packages/python/liteparse/__init__.py | 1 | CODE | |
| LOW | packages/python/liteparse/__init__.py | 1 | CODE | |
| LOW | packages/python/liteparse/__init__.py | 2 | CODE | |
| LOW | packages/python/liteparse/__init__.py | 2 | CODE | |
| LOW | packages/python/liteparse/__init__.py | 2 | CODE | |
| LOW | packages/python/liteparse/__init__.py | 2 | CODE | |
| LOW | packages/python/liteparse/__init__.py | 2 | CODE | |
| LOW | packages/python/liteparse/__init__.py | 2 | CODE | |
| LOW | packages/python/liteparse/__init__.py | 2 | CODE | |
| LOW | packages/python/liteparse/__init__.py | 2 | CODE | |
| LOW | packages/python/liteparse/__init__.py | 2 | CODE | |
| LOW | packages/python/liteparse/types.py | 3 | CODE | |
| LOW | packages/python/liteparse/types.py | 6 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/__init__.py | 3 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/__init__.py | 3 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/__init__.py | 3 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/__init__.py | 3 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/__init__.py | 3 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/__init__.py | 3 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/__init__.py | 3 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 1 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 1 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 1 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 2 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 1 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 2 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 3 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 4 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 5 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 6 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 7 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 8 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 9 | CODE | |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 10 | CODE | |
| LOW | …val_utils/src/liteparse_eval/providers/llm/__init__.py | 1 | CODE | |
| LOW | …val_utils/src/liteparse_eval/providers/llm/__init__.py | 1 | CODE | |
| LOW | …val_utils/src/liteparse_eval/providers/llm/__init__.py | 2 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ocr/suryaocr/test_server.py | 12 | def test_html_to_text_strips_tags_and_unescapes() -> None: | CODE |
| LOW | ocr/suryaocr/test_server.py | 19 | def test_html_to_text_empty_for_markup_only() -> None: | CODE |
| LOW | ocr/suryaocr/test_server.py | 47 | def test_server_health_endpoint() -> None: | CODE |
| LOW | ocr/suryaocr/test_server.py | 55 | def test_server_ocr_endpoint_maps_blocks() -> None: | CODE |
| LOW | ocr/suryaocr/test_server.py | 83 | def test_server_defaults_missing_confidence() -> None: | CODE |
| LOW | ocr/suryaocr/test_server.py | 101 | def test_server_skips_empty_and_skipped_blocks() -> None: | CODE |
| LOW | ocr/suryaocr/test_server.py | 123 | def test_server_derives_bbox_from_polygon_when_bbox_missing() -> None: | CODE |
| LOW | ocr/suryaocr/test_server.py | 137 | def test_server_keeps_zero_bbox_without_deriving_from_polygon() -> None: | CODE |
| LOW | ocr/suryaocr/test_server.py | 151 | def test_server_skips_whitespace_only_html() -> None: | CODE |
| LOW | ocr/paddleocr/test_server.py | 48 | def test_server_health_endpoint(server: PaddleOCRServer) -> None: | CODE |
| LOW | ocr/paddleocr/test_server.py | 77 | def test_server_normalizes_documented_language_aliases( | CODE |
| LOW | ocr/easyocr/test_server.py | 38 | def test_server_health_endpoint(server: EasyOCRServer) -> None: | CODE |
| LOW⚡ | packages/python/tests/test_parse_e2e.py | 20 | def test_parse_returns_parse_result(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW⚡ | packages/python/tests/test_parse_e2e.py | 24 | def test_parse_result_has_pages(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW⚡ | packages/python/tests/test_parse_e2e.py | 29 | def test_parse_result_has_text(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW⚡ | packages/python/tests/test_parse_e2e.py | 34 | def test_parse_result_has_json(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW | packages/python/tests/test_parse_e2e.py | 52 | async def test_parse_async_bytes_input(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW | packages/python/tests/test_parse_e2e.py | 135 | def test_multi_page_text_joined(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW | packages/python/tests/test_parse_e2e.py | 162 | async def test_file_not_found_async(self, parser: LiteParse): | CODE |
| LOW⚡ | packages/python/tests/test_screenshot_e2e.py | 19 | def test_screenshot_returns_batch_result( | CODE |
| LOW⚡ | packages/python/tests/test_screenshot_e2e.py | 25 | def test_screenshot_has_screenshots(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW⚡ | packages/python/tests/test_screenshot_e2e.py | 30 | def test_screenshot_result_fields(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW⚡ | packages/python/tests/test_screenshot_e2e.py | 39 | def test_screenshot_output_dir(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW⚡ | packages/python/tests/test_screenshot_e2e.py | 47 | def test_screenshot_png_format(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW⚡ | packages/python/tests/test_screenshot_e2e.py | 52 | def test_screenshot_jpg_format(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW⚡ | packages/python/tests/test_screenshot_e2e.py | 58 | async def test_screensho_async_basic(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW | packages/python/tests/test_batch_e2e.py | 18 | def test_batch_parse_returns_batch_result( | CODE |
| LOW | packages/python/tests/test_batch_e2e.py | 32 | def test_batch_parse_creates_output_files( | CODE |
| LOW | packages/python/tests/test_batch_e2e.py | 48 | def test_batch_parse_json_format(self, parser: LiteParse, invoice_pdf: Path): | CODE |
| LOW | packages/python/tests/test_batch_e2e.py | 85 | async def test_input_dir_not_found_async(self, parser: LiteParse): | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/processing.py | 80 | def analyze_image_with_claude( | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/report.py | 378 | def _generate_navigation_html(self) -> str: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/report.py | 411 | def _generate_all_documents_html(self) -> str: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/report.py | 461 | def _generate_pdf_preview_html(self, pdf_path: Path) -> str: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/liteparse/src/conversion.rs | 827 | // ── find_pdf_in_dir ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/lib.rs | 7 | // ── Public API re-exports ────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/lib.rs | 17 | // ── Modules with user-facing types (visible in docs) ─────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/projection.rs | 2917 | // ── ProjectedLine derivation ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/projection.rs | 3002 | // ── XY-cut layout decomposition ───────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/markdown_layout/lists.rs | 70 | // ── Lettered / roman ordered-list detection ─────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/markdown_layout/tables.rs | 1168 | // ── Description-list 2-column table detector ────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/markdown_layout/tables.rs | 1529 | // ── Cross-run merging (post-pass over `detect_tables` output) ────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/markdown_layout/tables.rs | 1584 | // ── Fragmented-cluster re-extraction ─────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/markdown_layout/tables.rs | 2322 | // ── Ruled-grid table detection ───────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/liteparse/src/markdown_layout/tables.rs | 3976 | // ── merge_consecutive_table_runs ───────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ocr/suryaocr/server.py | 148 | except Exception as e: | CODE |
| LOW | ocr/suryaocr/server.py | 153 | except Exception as e: | CODE |
| LOW | ocr/paddleocr/server.py | 91 | except Exception as e: | CODE |
| LOW | packages/python/liteparse/parser.py | 230 | except Exception as e: | CODE |
| LOW | packages/python/liteparse/parser.py | 282 | except Exception as e: | CODE |
| LOW | packages/python/liteparse/parser.py | 328 | except Exception as e: | CODE |
| LOW | packages/python/liteparse/cli.py | 13 | except Exception as e: | CODE |
| MEDIUM | packages/python/liteparse/cli.py | 14 | print(f"Error: {e}", file=sys.stderr) | CODE |
| MEDIUM | packages/python/liteparse/cli.py | 8 | def main() -> None: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/benchmark.py | 63 | except Exception: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/benchmark.py | 199 | except Exception as e: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/benchmark.py | 212 | except Exception: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/benchmark.py | 220 | except Exception as e: | CODE |
| MEDIUM | dataset_eval_utils/src/liteparse_eval/benchmark.py | 314 | print(f"Error: Not a directory: {args.input_dir}") | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/evaluation.py | 170 | except Exception as e: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/evaluation.py | 254 | except Exception as e: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/evaluation.py | 275 | except Exception as e: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/evaluation.py | 345 | except Exception as e: | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/processing.py | 192 | except Exception as e: | CODE |
| MEDIUM | dataset_eval_utils/src/liteparse_eval/processing.py | 250 | print(f"Error: Input directory does not exist: {args.input_dir}") | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/report.py | 466 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/liteparse-python/src/cli.rs | 64 | #[arg(long, default_value = "placeholder")] | COMMENT |
| LOW | crates/liteparse-python/src/cli.rs | 153 | "placeholder" => Ok(ImageMode::Placeholder), | CODE |
| LOW | crates/liteparse-python/src/cli.rs | 156 | "unknown image-mode '{}', expected 'off', 'placeholder', or 'embed'", | CODE |
| LOW | crates/liteparse-wasm/src/lib.rs | 189 | ImageMode::Placeholder => "placeholder".into(), | CODE |
| LOW | crates/liteparse-napi/src/types.rs | 43 | /// How to surface raster images in markdown output: "off", "placeholder" | COMMENT |
| LOW | crates/liteparse-napi/src/types.rs | 186 | ImageMode::Placeholder => "placeholder".to_string(), | CODE |
| LOW | crates/liteparse/src/figure_cluster.rs | 354 | text: "lorem ipsum dolor".into(), | CODE |
| LOW | crates/liteparse/src/main.rs | 106 | #[arg(long, default_value = "placeholder")] | COMMENT |
| LOW | crates/liteparse/src/main.rs | 278 | "placeholder" => Ok(ImageMode::Placeholder), | CODE |
| LOW | crates/liteparse/src/main.rs | 281 | "unknown image-mode '{}', expected 'off', 'placeholder', or 'embed'", | CODE |
| LOW | docs/src/content/docs/liteparse/guides/markdown.md | 65 | imageMode: "placeholder", // "placeholder" | "off" | "embed" (default: "placeholder") | CODE |
| LOW | docs/src/content/docs/liteparse/guides/markdown.md | 80 | image_mode="placeholder", # "placeholder" | "off" | "embed" | CODE |
| LOW | packages/python/README.md | 36 | image_mode="placeholder", # "placeholder" | "off" | "embed" | CODE |
| LOW | packages/python/README.md | 59 | image_mode="placeholder", # Markdown image handling: "placeholder" | "off" | "embed" | CODE |
| LOW | packages/wasm/README.md | 69 | | `imageMode` | `"off" \| "placeholder" \| "embed"` | `"placeholder"` | How raster images are surfaced in markdown outpu | CODE |
| LOW | packages/node/native.d.ts | 37 | * How to surface raster images in markdown output: "off", "placeholder" | COMMENT |
| LOW | packages/node/README.md | 37 | imageMode: 'placeholder', // "placeholder" | "off" | "embed" | CODE |
| LOW | packages/node/README.md | 60 | imageMode: 'placeholder', // Markdown image handling: "placeholder" | "off" | "embed" | CODE |
| LOW | packages/node/src/cli.ts | 79 | config.imageMode = opts.imageMode as "off" | "placeholder" | "embed"; | CODE |
| LOW | packages/node/src/lib.ts | 19 | export type ImageMode = "off" | "placeholder" | "embed"; | CODE |
| LOW | packages/node/src/lib.ts | 32 | /** How to surface raster images in markdown output (default: "placeholder"). */ | COMMENT |
| LOW | packages/node/src/lib.ts | 272 | imageMode: (resolved.imageMode as ImageMode) ?? "placeholder", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | packages/python/liteparse/parser.py | 206 | Parse a document file. Args: file_data: Path to the document file, or raw PDF bytes. | STRING |
| HIGH | packages/python/liteparse/parser.py | 237 | Determine per-page complexity without running a full parse. Returns one entry per page with signals (t | STRING |
| HIGH | packages/python/liteparse/parser.py | 291 | Generate screenshots of document pages. Supports PDFs natively. Non-PDF formats (DOCX, XLSX, images, e | STRING |
| HIGH | dataset_eval_utils/src/liteparse_eval/report.py | 535 | Convert first page of PDF to base64-encoded image. Uses JPEG compression if PIL is available, otherwis | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/bump-version.py | 95 | def update_cargo_version(path: Path, new_version: str) -> None: | CODE |
| LOW⚡ | scripts/bump-version.py | 105 | def update_liteparse_dep(path: Path, new_version: str) -> None: | CODE |
| LOW⚡ | scripts/bump-version.py | 115 | def update_json_version(path: Path, new_version: str) -> None: | CODE |
| LOW⚡ | scripts/bump-version.py | 125 | def update_pyproject_version(path: Path, new_version: str) -> None: | CODE |
| LOW | packages/python/liteparse/__init__.py | 15 | __all__ = [ | CODE |
| LOW | dataset_eval_utils/src/liteparse_eval/__init__.py | 14 | __all__ = [ | CODE |
| LOW | …et_eval_utils/src/liteparse_eval/providers/__init__.py | 15 | __all__ = [ | CODE |
| LOW | …utils/src/liteparse_eval/providers/parsers/__init__.py | 12 | __all__ = [ | CODE |
| LOW | …val_utils/src/liteparse_eval/providers/llm/__init__.py | 4 | __all__ = ["LLMProvider", "AnthropicProvider", "QA_PROMPT"] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/liteparse/src/conversion.rs | 457 | /// `.pdf` entry is more robust than constructing a fixed `<stem>.pdf` path. | COMMENT |
| MEDIUM | crates/liteparse/src/markdown_layout/headings.rs | 622 | /// robust where a total-char floor was not: a single short-but-real heading | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ocr/paddleocr/server.py | 49 | CODE | |
| LOW | ocr/paddleocr/server.py | 55 | CODE | |
| LOW | scripts/bump-version.py | 166 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/benchmark.py | 75 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/benchmark.py | 166 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/report.py | 534 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | dataset_eval_utils/src/liteparse_eval/evaluation.py | 368 | # Create a mapping of file paths to results | COMMENT |
| MEDIUM | dataset_eval_utils/src/liteparse_eval/processing.py | 16 | # Define the output schema using Pydantic-like structure | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/create-dataset.sh | 12 | # Usage: | COMMENT |
| LOW | scripts/compare-dataset.sh | 4 | # Usage: | COMMENT |
| LOW | scripts/upload-dataset.sh | 4 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/compare-dataset.sh | 60 | # Check if file exists | COMMENT |
| LOW | scripts/compare-dataset.sh | 146 | # Check if error was expected | COMMENT |
| LOW | …al_utils/src/liteparse_eval/providers/llm/anthropic.py | 70 | # Check if the response is "<pass>" or "<fail>" | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/upload-dataset.sh | 38 | # Step 1: Regenerate dataset from documents in the dataset directory | COMMENT |
| LOW⚡ | scripts/upload-dataset.sh | 42 | # Step 2: Upload to HuggingFace | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/upload-dataset.sh | 38 | # Step 1: Regenerate dataset from documents in the dataset directory | COMMENT |
| LOW⚡ | scripts/upload-dataset.sh | 42 | # Step 2: Upload to HuggingFace | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/python/liteparse/parser.py | 89 | CODE | |
| LOW | dataset_eval_utils/src/liteparse_eval/evaluation.py | 195 | CODE |