OCR V3
OCR V3 adalah service PDF-to-Markdown OCR RAGA, dibangun di atas Python + FastAPI. Menerima file PDF (upload atau URL), lalu memproksikan pekerjaan OCR-nya ke engine eksternal (cloud maupun local) — service ini sendiri tidak lagi menjalankan OCR engine secara langsung. Setelah hasil OCR diterima, service mengambil alih penyimpanan PDF sumber ke MinIO, mengindeks hasil teks ke Elasticsearch, dan memicu proses Summarize secara otomatis. Digunakan oleh API Tarantula untuk memproses dokumen yang diunggah user.
Berbeda dari service lain yang synchronous, OCR V3 memakai antrian in-memory dengan satu worker thread — request OCR yang besar/lama diproses di background lewat task_id, tidak memblokir request berikutnya.
Tech Stack
| Komponen | Teknologi |
|---|---|
| Runtime | Python 3.10/3.11 |
| Framework | FastAPI + uvicorn |
| OCR Processing | Diproksi ke engine OCR eksternal (cloud/local) via HTTP |
| Object Storage | MinIO |
| Search / Index | Elasticsearch |
| Integrasi Summarize | HTTP client ke service Summarize eksternal |
| Secret Management | infisical_sdk (Python) |
Detail environment variable, endpoint, dan diagram pipeline lengkap ada di halaman Teknis.
Cara Kerja Singkat
- Client (API Tarantula) mengirim
POST /api/v1/pdfs— file/URL PDF masuk ke antrian in-memory, service langsung membalas besertatask_id(statuspending). - Satu worker thread mengambil task dari antrian secara serial, lalu mem-proxy file/URL tersebut ke OCR engine eksternal (
CLOUD_PROCESSING_ENDPOINTatauLOCAL_PROCESSING_ENDPOINT, tergantung parameterprocessing), dan polling status task upstream sampai selesai. - Setelah hasil OCR (
content_list+md_content_list) diunduh, PDF sumber (jika berasal dari upload/merge) diunggah ke MinIO, dan hasil teks di-index ke Elasticsearch per-chunk (5 halaman per chunk). - Proses Summarize dipicu otomatis di background terhadap hasil OCR — ringkasan dan ringkasan per-chunk disimpan kembali ke Elasticsearch, tanpa memblokir penyelesaian task OCR.
- Client polling
GET /api/v1/tasks/{task_id}/statusuntuk memantau progres, lalu mengambil hasilnya lewatGET /api/v1/pdfs/{id}.
Mode OCR
Mode (type_ocr) | Keterangan |
|---|---|
ekstrak_only (default) | Ekstraksi teks saja tanpa analisis gambar |
representasi | Teks + deskripsi gambar, jumlah gambar dibatasi representasi_count |
Mode ini hanya diteruskan sebagai parameter ke OCR engine eksternal — logika OCR-nya sendiri dijalankan oleh engine tersebut, bukan oleh OCR V3.
Ringkasan
OCR V3 kini berperan sebagai lapisan orkestrasi: memproksikan pemrosesan PDF ke OCR engine eksternal (cloud/local), lalu menangani penyimpanan (MinIO), pengindeksan (Elasticsearch), dan pemicuan ringkasan dokumen (Summarize) secara otomatis. Dirancang untuk beban kerja berat lewat model antrian in-memory satu worker — client tidak menunggu request selesai secara sinkron, melainkan polling status lewat task_id sampai hasil siap diambil.