feat: simplify layout model selection and archive proposals

Changes:
- Replace PP-Structure 7-slider parameter UI with simple 3-option layout model selector
- Add layout model mapping: chinese (PP-DocLayout-S), default (PubLayNet), cdla
- Add LayoutModelSelector component and zh-TW translations
- Fix "default" model behavior with sentinel value for PubLayNet
- Add gap filling service for OCR track coverage improvement
- Add PP-Structure debug utilities
- Archive completed/incomplete proposals:
  - add-ocr-track-gap-filling (complete)
  - fix-ocr-track-table-rendering (incomplete)
  - simplify-ppstructure-model-selection (22/25 tasks)
- Add new layout model tests, archive old PP-Structure param tests
- Update OpenSpec ocr-processing spec with layout model requirements

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
egg
2025-11-27 13:27:00 +08:00
parent c65df754cf
commit 59206a6ab8
35 changed files with 3621 additions and 658 deletions

View File

@@ -0,0 +1,31 @@
# Tool_OCR Commit History Review (2025-11-12 ~ 2025-11-26)
本報告依 `git log` 全量 97 筆提交整理,涵蓋開發脈絡、里程碑、測試/品質信號與後續風險。提交類型統計35 `feat` / 37 `fix` / 9 `chore` / 5 `test` / 4 `docs` / 2 `refactor`,主要集中於 2025-11-18、11-19、11-20 與 11-24 的密集開發。
## 時間軸與里程碑
- **前期基礎與前端現代化 (11-12~11-13)**`21bc2f9`, `57cf912` 將前端改為 Tailwind v4 +專業 UI`0f81d5e` 單容器 Docker 化、`d7e6473` WSL Ubuntu 開發環境。
- **GPU 加速與相容性 (11-14)**`6452797` 提案 + `7536f43` 實作 GPU OCR`d80d60f`/`3694411`/`80c091b` 修正 Paddle 3.x API 與安裝來源,`b048f2d` 暫停圖表識別以避免 API 缺口。
- **外部 Auth V2 與管理後台 (11-14~11-16)**`28e419f`~`fd98018` 完成外部認證 V2、資料表前綴與架構移除 V1`8f94191` 新增後台/稽核/Token 檢查;`90fca50`/`6bb5b76` 讓 18/18 測試全過。
- **V2 UI 串接與初版版面保持 PDF (11-16~11-18)**:前端/後端全面切換 V2 API (`ad5c8be` 之後)`fa1abcd` 版面保持 PDF + 多次座標/重疊修正 (`d33f605`~`0edc56b`),強化 logging (`d99d37d`)。
- **雙軌處理架構 (11-18~11-20)**`2d50c12` + `82139c8` 導入 OCR/Direct 雙軌與 UnifiedDocument`a3a6fbe`/`ab89a40`/`ecdce96` 完成轉換、JSON 匯出與 PDF 支援;`1d0b638` 後端 API`c2288ba` 前端支援,`c50a5e9` 單元/整合測試;`0974fc3` E2E 修復,`ef335cf` Office 直抽,`b997f93`/`9f449e8` GPU 記憶體管理與文件化,`2ecd022` E2E 測試完成。
- **PDF 版面復原計畫 (11-20 提案11-24 實作高峰)**`cf894b0` 提案後,`0aff468` Phase1 圖片/表格修復,`3fc32bc` Phase2 風格保存,`77fe4cc`/`ad879d4`/`75c194f` 等完成 Alignment、List、Span 級渲染與多欄位;一系列 `93bd9f5`~`3358d97` 針對位置/重疊/缺圖修正,`4325d02` 專案清理並封存提案。
- **PP-Structure V3 調校 (11-25)**`a659e7a` 改善複雜圖示結構保留,`2312b4c` 前端可調 `pp_structure` 參數 + 測試,`0999898` 多頁 PDF 座標校正。
- **記憶體管理與混合抽圖 (11-25~11-26)**`ba8ddf2` 提案,`1afdb82` 混合圖片抽取+記憶體管理落地,`b997f93` 系列 GPU 釋放/可選 torch引入 ModelManager、ServicePool、MemoryGuard詳見 `openspec/changes/archive/2025-11-26-enhance-memory-management``a227311` 封存提案但僅完成 75/80 任務(剩餘文件化);隨後多筆修復(`79cffe6`~`fa9b542`)處理 PDF 回歸與文字渲染,`6e050eb` 為最新 OCR 軌表格格式/裁剪修正。
## 品質與測試信號
- 11-16 完成 V2 API 測試 18/18 (`6bb5b76`),建立初步信心。
- 雙軌導入時新增單元/整合/E2E 測試 (`0fcb249`, `c50a5e9`, `2ecd022`),但後續 PDF 版面復原大量依賴人工驗證Phase 4 測試仍未完成(見下)。
- 記憶體管理變更伴隨 57+18+10 測試檔(任務 8.1 完成),但文件化缺失可能影響交接與調參。
- 11-24 大量 PDF 修復連續提交顯示迭代式修 bug建議增加回歸測試覆蓋特別是表格/多欄/列表與跨軌道 PDF
## 未盡事項與風險
- **記憶體管理文件化缺口**`openspec/changes/archive/2025-11-26-enhance-memory-management/tasks.md` 未完成 Section 8.2(架構說明、調校指南、疑難排解、監控、遷移指南),可能影響部署可操作性。
- **PDF 版面復原驗證不足**:同一變更的 Phase 4 測試/效能/文件與多類文件驗證均未勾選,現階段品質依賴手測。
- **近期修正集中於 PDF 與表格**`79cffe6`, `5c561f4`, `19bd5fd`, `fa9b542`, `6e050eb`),顯示 Direct/OCR 軌 PDF 路徑仍脆弱;缺乏自動化回歸易再度回歸。
- **主分支狀態**`main``origin/main` 超前 1 提交(`6e050eb`),請推送前確認 CI/測試。
## 建議後續行動
1) 完成記憶體管理文件架構、調參、故障排除、Prometheus 監控指南)並加入 sanity check。
2) 為 PDF 版面復原建立最小回歸集:多欄文檔、含圖表/表格的 Direct/OCR 軌、列表與 span 混排。
3) 圍繞 `processing_track` 分流與 UnifiedDocument/PDF 生成的邊界條件增加測試LOGO/未知元素、跨頁表格、OCR/Direct 混合圖片)。
4) 推送前跑現有單元/整合/E2E 測試,補上近兩週新增場景的腳本以降低回歸風險。

View File

@@ -0,0 +1,24 @@
# Project Risk & Issue Outlook
本文件整理當前專案的可預見問題、潛在問題與建議修復方向(依風險與可行性排序)。依據來源:`git log`97 commits, 2025-11-12~11-26`docs/architecture-overview.md``openspec/changes/archive/2025-11-26-enhance-memory-management/tasks.md` 等。
## 可預見的問題項目
- **記憶體管理文件缺口**`openspec/changes/archive/2025-11-26-enhance-memory-management/tasks.md` 的 8.2 文檔未完成ModelManager/ServicePool/MemoryGuard 的調參與故障處置缺乏 runbook部署或擴容時易踩坑。方向補完架構說明、調參指南、故障排解與監控落地範例Prometheus 指標與警戒值)。
- **PDF 生成回歸風險高**:版面保持與表格/圖片渲染在 `fa1abcd` 之後多次修正(例如 `d33f605``92e326b``108784a``3358d97``6e050eb`),顯示缺少自動回歸。方向:建立最小回歸集(多欄文本、含圖表/表格、列表/Span 混排)與 golden PDF/JSON 比對,覆蓋 Direct/OCR 雙軌。
- **最新 OCR 表格格式修復未經回歸**`6e050eb` 修正 OCR 軌表格資料格式與裁剪,無對應測試。方向:為 OCR 軌加表格解析/PDF 出圖的整合測試,確保與前端下載/展示一致。
- **PP-Structure 參數調校可能影響資源**`frontend` 支援前端可調 `pp_structure_params``2312b4c`),若缺乏 guard可能放大 GPU/記憶體壓力。方向:在後端對超參做白名單與上限檢查,並納入 MemoryGuard 預估。
- **Chart 能力啟停策略缺少驗證**`b048f2d` 禁用 → `7e12f16` 重新啟用;缺少覆蓋率與性能數據。方向:為 chart 模型啟用/關閉建立健康檢查與 A/B 測試數據收集。
## 潛在的問題項目
- **UnifiedDocument 結構漂移風險**雙軌共用輸出近期多次調整列表、Span、多欄、LOGO 元素),缺少結構驗證或 schema 鎖定。可能導致前端/匯出器/PDF 生成不一致。方向:定義 JSON Schema 或 pydantic 驗證,建立 contract 測試。
- **服務池與記憶體守護的長時間行為未驗證**:雖有單元/整合測試,缺乏長時間 soak/stressGPU 記憶碎片、模型 unload/reload、信號處理。方向加入 24h soak 測試與記憶體走勢告警,驗證 SIGTERM/SIGINT 清理。
- **LibreOffice 轉檔鏈低觀測性**Office 直抽與轉 PDF (`ef335cf`) 依賴系統 LibreOffice缺少失敗監控與重試策略。方向為轉檔階段增加 metrics/告警,並提供 fallback/重試。
- **前端/後端 API 契約缺少檢查**:多次 V1→V2 遷移與新增參數(`pp_structure_params` 等),目前僅靠 E2E缺少型別/契約檢查。方向:加入 OpenAPI 契約測試或生成型別校驗ts-sdk 對齊 FastAPI schema
- **混合抽圖/圖片保存路徑邊界**Direct/OCR 混合抽圖與 `_save_image` 實作曾多次修復,仍缺少對 None/缺檔路徑的防禦。方向:為缺檔/無圖的 PDF 生成加強斷言與 fallback。
## 建議修復與方向
1) **完成記憶體管理文檔與樣板設定**:在 `docs/` 新增 MemoryGuard/ServicePool 調參與故障排除指南,附 `.env` 範例與 Prometheus 規則,對應 tasks 8.2 清單。
2) **建立 PDF/UnifiedDocument 回歸套件**:收集代表性樣本(多欄、表格、列表、含圖/LOGO、OCR/Direct 雙軌),產生 golden JSON/PDF加入 CI 比對,並為 `6e050eb` 相關表格路徑新增測試。
3) **加入 UnifiedDocument Schema 驗證**:定義 schemapydantic/JSON Schema在匯出/PDF 生成前驗證;同時讓前端型別由 OpenAPI 生成以防 drift。
4) **PP-Structure 參數防護與資源估算**:後端實作白名單/上限與 MemoryGuard 預估,避免前端自由調參造成 GPU OOM增加拒絕/降級回饋。
5) **長時間穩定性與轉檔可觀測性**:增加 soak/stress pipeline追蹤 GPU/CPU/記憶碎片;為 LibreOffice/轉檔階段加 metrics、重試與錯誤分類告警。