diff --git a/TODO.md b/TODO.md index f1e6ea8..deb5059 100644 --- a/TODO.md +++ b/TODO.md @@ -416,6 +416,24 @@ casting. The original PDF remains the visual source of truth while approved arti - [~] Add OCR-engine benchmark comparisons and per-page fallback selection. *(per-page fallback done, now a real two-engine chain: vision OCR escalates when a page needs OCR or scores poorly, KDL Frontier Parser nano is the vision fallback, tesseract is the last resort; no formal benchmark)* +- [ ] **Evaluate additional OCR/vision candidates against the two already wired (baidu/Unlimited-OCR, + KDL-Frontier-Parser-nano) and pick the best fit per task** — user-requested 2026-09-14. Goal: low RAM/VRAM + footprint with excellent speed and quality, for both page-text transcription and open-ended figure/chart + description (the latter is the harder requirement — confirmed live that baidu/Unlimited-OCR is + transcription-only and cannot do it at all, see `architecture/magazine-ingestion.md` and CHANGELOG 1.29.0). + Candidates to install as Docker containers alongside the existing engines, each added through the Engines tab + (`routes/docker.py`'s `_LOCAL_CONTAINER_DEFS`, role `ocr`) so they're selectable/connectable/benchmarkable like + any other engine, not hardcoded: + - [ ] [docling](https://github.com/docling-project/docling) — document conversion/layout toolkit. + - [ ] [PaddleOCR](https://github.com/PaddlePaddle/PaddleOCR) — established general-purpose OCR. + - [ ] [DeepSeek-OCR](https://github.com/deepseek-ai/DeepSeek-OCR) — vision-language OCR model. + - [ ] Qwen3-VL-30B-A3B-Instruct-FP8 — general vision-language model; check whether it fits the RAM/VRAM + budget at 30B-A3B FP8 (likely the heaviest candidate — weigh against the "low footprint" goal + specifically) and whether it's meaningfully better at open-ended description than the nano-class + candidates above. + For each: measure page-transcription accuracy and figure/chart-description quality against the existing + c't KI Wissen 2026 test corpus, plus idle/active VRAM footprint and latency, before deciding what replaces or + joins the current primary/fallback pair. ### P2 — Finding magazines to read