SurfSense/docs/proposals
DESKTOP-RTLN3BA\$punk 6c2e2df61e perf(local): read born-digital PDFs from their text layer
Every PDF went through Docling's layout, OCR and TableFormer models, about
3 s a page (5.5 on table pages) plus an 11 s cold start and 1 GB of RSS.
A born-digital PDF already carries its text: pdfium reads it in about
7 ms a page with the page check.

A PDF is now read from its text layer when every page passes a per-page
check (no scans, scanner OCR layers, garbled or margin-only text, rotated
pages or filled form fields); otherwise Docling reads it as before. Pages
are joined with a blank line, soft hyphens are rejoined. Text-read PDFs
keep their figures through the figures-only pass: on first request, and at
idle priority when the file has images.

Measured through the upload route on an idle Ryzen 5800X: Executive
Summary (12 pp) 16.7 s -> 1.4 s, Operating Budget (46 pp) 125.6 s -> 9.0 s,
a 33-page spec 73 s -> 3.8 s. In a Basic-mode A/B on the Boston budget
corpus the shipped text scored 0.70 strict against 0.60 for Docling's
markdown; a second, smaller corpus is 2.9 points behind on table cells.

SURFSENSE_LOCAL_PDF_TEXT_LAYER=off restores Docling for every PDF.
ADR 0059.
2026-10-16 03:02:17 -07:00
..
agent fix(agent): fence a repository before opencode can open a workspace's folders 2026-10-13 17:50:17 +02:00
claude-plan docs(adr): a Claude plan runs through the user's own Claude Code 2026-10-16 11:20:37 +05:30
docker docs: cover the work since 2.1.0 so others can pick it up 2026-10-11 17:55:51 -07:00
file-agent fix(agent): keep a git repository above the data folder from becoming opencode's project 2026-10-12 16:29:32 +02:00
plugins docs(plugins): fold the built remote plugins into architecture, keep only what is not built as the proposal 2026-10-14 13:47:47 +05:30
chat-eval.md feat(local): send a chat turn's passages with its question 2026-10-05 21:44:05 +02:00
cjk-keyword-search.md docs(local): propose keyword search for Japanese and Chinese 2026-10-02 16:05:00 +08:00
cuda-backend.md docs: reorganize engineering docs under docs/ 2026-09-22 21:27:26 -07:00
embedding-model-change.md docs(proposals): curate embedders in the local manifest, add server adapters 2026-10-01 21:11:23 +05:30
embedding-model-choice.md refactor(local): split the onboarding model step into folders 2026-10-02 01:57:57 +05:30
local-audio-models.md docs: cover the work since 2.1.0 so others can pick it up 2026-10-11 17:55:51 -07:00
local-image-and-video-models.md docs: cover the work since 2.1.0 so others can pick it up 2026-10-11 17:55:51 -07:00
local-speech-to-text.md fix(local): stage audio.cpp again when it lacks a curated family 2026-10-15 16:36:05 -07:00
model-catalog.md fix(local): keep a ChatGPT plan out of speech settings, and docs that match v1 2026-10-14 15:04:38 -07:00
parser-gpu.md perf(local): read born-digital PDFs from their text layer 2026-10-16 03:02:17 -07:00
retrieval.md feat(local): choose the embedding model in onboarding 2026-10-02 01:45:10 +05:30
source-preview.md docs: cover the work since 2.1.0 so others can pick it up 2026-10-11 17:55:51 -07:00