infoxtractor/src/ix
Dirk Riemann 2e8ca0ee43
All checks were successful
tests / test (push) Successful in 1m43s
tests / test (pull_request) Successful in 1m21s
feat(ui): add browser UI at /ui for job submission
Minimal Jinja2 + HTMX + Pico CSS UI (all CDN, no build step) that lets
a user drop a PDF, pick a registered use case or define one inline,
tweak OCR/GenAI/provenance options, submit, and watch the pretty-JSON
result come back via 2s HTMX polling. Uploads land in
{tmp_dir}/ui/<uuid>.pdf via aiofiles streaming with the existing
IX_FILE_MAX_BYTES cap.

All submissions go through the same jobs_repo.insert_pending entry
point the REST adapter uses — no duplicated logic. The REST surface is
unchanged.

Tests: tests/integration/test_ui_routes.py — 8 cases covering GET /ui,
registered + custom use-case submissions (asserting the stored request
carries use_case_inline for the custom path), malformed fields_json
rejection, and the fragment renderer for pending vs. done.

New deps pinned explicitly in pyproject.toml:
jinja2, aiofiles, python-multipart (arrive transitively via FastAPI but
we own the import surface now).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 21:27:54 +02:00
..
adapters feat(pg-queue): LISTEN ix_jobs_new + 10s fallback poll (spec §4) 2026-04-18 11:52:26 +02:00
contracts feat(use-cases): add inline use-case definitions 2026-04-18 21:01:27 +02:00
genai fix(genai): drop Ollama format flag; extract trailing JSON from response 2026-04-18 14:05:28 +02:00
ingestion feat(ingestion): fetch_file + MIME sniff + DocumentIngestor (spec §6.1) 2026-04-18 11:12:00 +02:00
ocr feat(app): production wiring — factories, pipeline, /healthz real probes 2026-04-18 12:09:11 +02:00
pipeline feat(use-cases): add inline use-case definitions 2026-04-18 21:01:27 +02:00
provenance feat(provenance): mapper + verifier for ReliabilityStep (spec §9.4, §6) 2026-04-18 11:01:19 +02:00
segmentation feat(segmentation): SegmentIndex + prompt-text formatter (spec §9.1) 2026-04-18 10:53:46 +02:00
store feat(store): JobsRepo CRUD over ix_jobs + integration fixtures (spec §4) 2026-04-18 11:43:11 +02:00
ui feat(ui): add browser UI at /ui for job submission 2026-04-18 21:27:54 +02:00
use_cases feat(use-cases): add inline use-case definitions 2026-04-18 21:01:27 +02:00
worker feat(app): production wiring — factories, pipeline, /healthz real probes 2026-04-18 12:09:11 +02:00
__init__.py feat(scaffold): project skeleton with uv + pytest + forgejo CI 2026-04-18 10:36:43 +02:00
app.py feat(ui): add browser UI at /ui for job submission 2026-04-18 21:27:54 +02:00
config.py fix(deploy): switch to network_mode: host — reach postgis + ollama on loopback 2026-04-18 13:00:02 +02:00
errors.py feat(errors): add IXException + IXErrorCode per spec §8 2026-04-18 10:46:01 +02:00