Coverage for src / quber / core / extractors / camelot / llm / __init__.py: 100%
2 statements
« prev ^ index » next coverage.py v7.14.0, created at 2026-09-23 22:14 -0400
« prev ^ index » next coverage.py v7.14.0, created at 2026-09-23 22:14 -0400
1"""
2CamelotLLMTableExtractor — Camelot for cell values, LLM for structure.
4The integrity contract:
6- Camelot DataFrame numeric values flow into the output unchanged.
7- The page PNG raster flows into both the count-tables audit and the
8 structure-correction call.
9- The LLM is forbidden from touching numbers (enforced by the system
10 prompt in `quber.agents.llm_client`).
12Camelot output from both flavors flows into the classifier (drops
13non-tables) and then the unifier (combines the flavor outputs per page).
15The package is split by what a reader needs in view at once:
17- `orchestrator` — the public face: constructor defaults, deps wiring,
18 `extract_tables` / `extract_tables_sync`.
19- `pipeline` — the pydantic-graph async graph: edge payload models,
20 state/deps, steps, and the builder (the graph topology notes live on
21 its module docstring).
23The Camelot layer (page rendering, both flavors in spawn-context
24subprocesses, content-empty shell detection) is shared with the
25correspondence extractor and lives in
26`quber.core.extractors.camelot.acquire`.
27"""
29from quber.core.extractors.camelot.llm.orchestrator import CamelotLLMTableExtractor
31__all__ = ["CamelotLLMTableExtractor"]