kenzychew's picture
rename package doc_agent -> docfield, distribution -> docfield-extract
b6beb2d
Raw
History Blame Contribute Delete
2.1 kB
"""Hugging Face Space entry point.
A thin launcher for the Gradio demo. All UI and pipeline logic lives in
``docfield.web.app``; this file only makes the ``src/`` package importable on
the Space (which runs this file from the repo root without pip-installing the
package) and then builds and launches the demo. Configuration and secrets
(GEMINI_API_KEY, EXTRACTION_BACKEND, IMAGE_STRATEGY, GEMINI_MODEL) are read from
the environment -- set them as Space repository secrets, never in a file.
Logging is configured here because the Space imports this file rather than
running any module's ``__main__`` block, so nothing else would configure it. An
unconfigured root logger defaults to WARNING, which silently dropped the core's
per-document INFO record: failures appeared in the Space log pane and successes
left no trace at all.
The record deliberately carries no extracted field values -- only the filename,
modality, backend, decision, confidence, and the *codes* of any failed
validation rules. The Space log pane is readable by visitors, and the privacy
notice asks people not to upload real documents but cannot enforce it, so the
log must not expose document content if someone ignores it. A decision plus a
rule code is enough to debug from.
"""
import logging
import sys
from pathlib import Path
# src-layout: make `docfield` importable without installing the package.
sys.path.insert(0, str(Path(__file__).parent / "src"))
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(levelname)s %(name)s: %(message)s",
)
# httpx logs a line per request, so an INFO root logger turns every Gemini call
# and every Gradio telemetry ping into log noise that buries the one record
# worth reading. Their content is already covered: a successful call shows up in
# the per-document record, and a failed one in the backend's own warning.
for _noisy in ("httpx", "httpcore"):
logging.getLogger(_noisy).setLevel(logging.WARNING)
from docfield.web.app import build_demo # noqa: E402 (import after path setup)
demo = build_demo()
if __name__ == "__main__":
demo.launch()