# Laporan Eksekusi Akhir: Flow Testing Pipeline Backend SRE

## Tanggal
Jumat, 15 Mei 2026

## Executive Summary
Dokumen ini merangkum eksekusi pengujian (*benchmarking*) modular *end-to-end* untuk *pipeline ingestion Knowledge Graph*. Infrastruktur pengujian ini dirancang berdasarkan prinsip **Isolated Testing** (menguji setiap modul secara mandiri), **Strict Constraint** (kepatuhan mutlak untuk tidak merusak atau memodifikasi kode utama pada `app/`), serta **Fail-Safe Logging** (pencatatan data performa tipe *append-only* secara *real-time*). 

Pengujian membedah 5 tahap krusial: **Parsing** (ekstraksi PDF via `HybridParser`), **Chunking** (hierarki pemecahan teks), **Retrieval** (pencarian kemiripan vektor *in-memory*), **Extraction** (pengujian LLM Agnostik dan *costing*), dan **Graph** (injeksi Node & generasi Edge di Neo4j). Selain memvalidasi fungsionalitas, skrip pengujian berhasil melakukan pemrofilan (*profiling*) terhadap beban perangkat keras (*Peak RAM*, CPU), latensi eksekusi, serta metrik keuangan (biaya API via LLM *Pricing Matrix*), memberikan wawasan komprehensif bagi optimasi *production* di masa mendatang.

---

## Ringkasan Script Testing

### RINGKASAN SCRIPT TESTING [benchmark_parsing.py]
**Deskripsi:**
Skrip ini berfokus menguji keandalan kelas `HybridParser`. Skrip ini melakukan pembacaan terhadap dokumen PDF murni (digital maupun hasil pindaian/gibberish) yang tersimpan di `Literature/`. Pengujian difokuskan pada pengukuran kecepatan konversi PDF ke Markdown murni, sembari memantau lonjakan RAM dan CPU menggunakan pustaka sistem `psutil`.

**Penjelasan Matrix:**
Menghasilkan `performance_matrix_parsing.md` dengan parameter:
*   `Timestamp`: Waktu eksekusi iterasi.
*   `Document`: Nama file PDF yang di-*parse*.
*   `Pages`, `Text Pgs`, `OCR Pgs`, `OCR Timeouts`: Variabel indikator PDF (*N/A* diterapkan jika tidak diekspos *parser* utama).
*   `Peak RAM (MB)` & `Peak CPU (%)`: Lonjakan sumber daya sistem selama proses ekstraksi teks berlangsung.
*   `Total Time (s)`: Total latensi yang dibutuhkan parser.
*   `Output Length`: Panjang karakter murni dari file `.md` yang dihasilkan.
*   `Status` & `Note`: Indikator keberhasilan.

---

### RINGKASAN SCRIPT TESTING [benchmark_chunking.py]
**Deskripsi:**
Skrip ini menguji tahap dekonstruksi dokumen Markdown menjadi blok-blok referensi yang lebih kecil menggunakan `MarkdownHeaderTextSplitter` dan `RecursiveCharacterTextSplitter`. Tujuan dari pengujian ini bukan cuma memantau waktu, melainkan mengukur retensi **Semantik Struktural**, yaitu seberapa banyak dari *Parent Chunk* yang sukses mengikat informasi referensi bab (misal: "## Introduction") di dalam *metadata_header*-nya, yang sangat berguna bagi tahap pencarian nanti.

**Penjelasan Matrix:**
Menghasilkan `performance_matrix_chunking.md` dengan parameter:
*   `Total Parent Chunk` & `Total Child Chunk`: Volume potongan teks yang diproduksi.
*   `P-CHUNK AVERAGE SIZE` & `C-CHUNK AVERAGE SIZE`: Rata-rata panjang karakter masing-masing tipe blok teks.
*   `P-HEADER RATE`: Metrik kunci berupa persentase jumlah *Parent Chunks* yang memegang string non-kosong di dalam properti `metadata_header` (menyentuh angka sempurna **100.0%** pada uji coba).
*   `RAM`, `CPU`, `TIME (s)`: Indikator beban komputasi pemecahan *string*.

---

### RINGKASAN SCRIPT TESTING [benchmark_retrieval.py]
**Deskripsi:**
Skrip ini menguji efisiensi proses pencarian semantik (penggabungan antar *Child Chunks* dan 5 pilar kueri akademik) menggunakan pendekatan komputasi lokal *in-memory*. Memanfaatkan pustaka `numpy` dan model NLP lokal `all-MiniLM-L6-v2`, skrip melakukan kalkulasi *Cosine Similarity* tanpa harus terhubung ke layanan basis data vektor seperti Neo4j/Supabase, yang mempercepat laju diagnostik.

**Penjelasan Matrix:**
Menghasilkan `performance_matrix_retrieval.md` dengan parameter:
*   `CHUNKS EMBEDDED`: Total *Child Chunks* dari dokumen yang dikonversi ke dalam vektor *embedding*.
*   `EMBED TIME (s)`: Latensi spesifik dari proses pengubahan teks menjadi *array* vektor.
*   `SEARCH TIME (s)`: Latensi spesifik kalkulasi matematika kemiripan *cosine* (umumnya <0.05s).
*   `AVG SCORE (BG/MET/GAP/OBJ/FUT)`: Daftar nilai *Cosine Similarity* rata-rata untuk *Top 3 Parent Chunks* dari masing-masing kelima pilar akademik. Berguna untuk mendeteksi *confidence* model.

---

### RINGKASAN SCRIPT TESTING [benchmark_extraction.py]
**Deskripsi:**
Pengujian tahap *Information Extraction* menggunakan model struktur `Pydantic`. Inovasi utama skrip ini terletak pada sakelar **Agnostic Provider**, yang memungkinkan peralihan panggilan instan antara API OpenAI dan Alibaba DashScope tanpa perlu menyabotase *file* lingkungan (`.env`). Skrip juga memperkenalkan integrasi pustaka `tiktoken` untuk perhitungan (*profiling*) token secara luring, dan pemetaan tarif (Pricing Matrix) untuk menaksir nilai pengeluaran per-jurnal.

**Penjelasan Matrix:**
Menghasilkan `performance_matrix_extraction.md` dengan parameter:
*   `MODEL`: Model linguistik yang dipilih oleh sakelar saat baris dicetak (cth. `qwen3-30b...`).
*   `TIKTOKEN INPUT`: Taksiran token lokal pra-panggilan menggunakan *encoder* `cl100k_base`.
*   `LLM OUT TOKEN`: Jumlah token keluaran resmi yang didapat dari beban API.
*   `LATENCY (s)`: Lama tunggu komputasi API eksternal.
*   `COST ($)`: Biaya aktual yang terpakai setelah mengkalikan token *Input/Output* dengan matriks harga.

---

### RINGKASAN SCRIPT TESTING [benchmark_graph.py]
**Deskripsi:**
Tahap final dari siklus pengujian yang berinteraksi langsung dengan *database* Neo4j secara terisolasi. Skrip melakukan *hashing* fisik, injeksi Node literatur menggunakan *vector embedding* (OpenAI), disusul pencarian hubungan antar-jurnal (`Semantic Retrieval`) hingga memvalidasi logika bertingkat (*Coherence*, *Domain Compatibility*, dan *Reasoning Gate*). Skrip diprogram untuk tidak pernah merekayasa penurunan ambang batas semantik (`PILLAR_THRESHOLD_MATRIX`) yang sudah diterapkan pada lingkungan *production*.

**Penjelasan Matrix:**
Tahapan kompleks ini menghasilkan dwi-matriks (dua keluaran pelaporan):
1.  **Node Matrix (`performance_matrix_node.md`)**: Parameter meliputi `Embed Model`, `Pillars Count`, `Token Input`, `Embed Cost`, latensi `Embed/DB Insert`, dan `Total Time` pembuatan suatu entitas Literatur utuh.
2.  **Edge Matrix (`performance_matrix_edge.md`)**: Parameter meliputi `Source Doc`, `Target Doc`, `Edge Type`, `Cost ($)` LLM *Reasoning*, serta indikator *status pass/fail* spesifik untuk empat parameter gerbang (`Gating: Retrieval`, `Gating: Coherence`, `Gating: Domain`, `Gating: Reasoning`).

---

## Permasalahan yang Ditemui
Dari rangkaian hasil komputasi *hardware* hingga keluaran artifak `.md`, teridentifikasi beberapa *bottleneck* maupun anomali teknis krusial:

1.  **Konflik Lingkungan Virtual (VENV):** Pada fase `benchmark_parsing.py`, timbul bentrokan ruang kerja antar-modul, yakni *namespace* `fitz` yang dimiliki oleh dua paket pustaka berbeda.
2.  **Inkoherensi Akurasi Semantik (Retrieval):** Ulasan inspeksi pada *Human Verification Markdown* memperlihatkan akurasi pencarian yang teramat buruk (menarik bab *Conclusion* saat dicari pilar *Methodology*). Skor matriks tercatat medioker di ambang `0.24 - 0.38`.
3.  **Disonansi Bahasa & Kelemahan Dimensi Model Lokal:** Model `all-MiniLM-L6-v2` kesulitan mencerna kueri yang bersifat campur aduk (Bilingual Indonesia-Inggris) dan gaya pencarian tipe "Keyword Stuffing". Dimensi kecil (384-dim) terbukti kurang peka memetakan hierarki teks jurnal saintifik tebal.
4.  **Bentrok Dimensi Embedding OpenAI:** Logika utama `is_valid_embedding()` mengekspektasikan dimensi vektor sejumlah `1024`. Namun, skrip injeksi Graph memakai `text-embedding-3-small` yang memuntahkan arsitektur `1536` dimensi, memaksa pemberlakuan *runtime monkey-patching* saat *benchmark* Node Graph berlangsung.
5.  **Paceklik Generasi Edge Neo4j:** Sesuai rencana mematuhi tingkat Threshold matriks produksi (`0.78 - 0.82`), seluruh kalkulasi *Semantic Retrieval* ditolak dan gugur pada `Retrieval Gate`, mengakibatkan gerbang *LLM Reasoning* sama sekali tidak tersentuh di dalam skrip `benchmark_graph.py`.

---

## Saran Pengembangan / Perbaikan
1.  **Prompt Tuning Kueri Vektor:** Harus ada transisi radikal untuk menuliskan kueri pencarian vektor dari wujud *Keyword Stuffing Bilingual* menuju kueri *Natural English Question* (Misal: *"What is the core methodology, framework, and dataset architecture used in this study?"*).
2.  **Pemutakhiran Model Embedding:** Untuk meningkatkan akurasi: 
    *   Jika mempertahankan *Local Embedding*, pertimbangkan migrasi ke BAAI `bge-small-en-v1.5`.
    *   Jika beralih ke *Cloud API*, bangun fungsi *Exponential Backoff* atau *Chunk Batching* agar panggilan vektor *Child Chunks* yang masif tidak dijegal oleh batasan `Rate Limits` OpenAI.
3.  **Sinkronisasi Kode Utama (Codebase):** Ubah atau parametrisasi kondisi `1024` pada blok fungsi `is_valid_embedding` (di dalam `app/services/ingestion.py`) jika `text-embedding-3-small` (1536 dimensi) benar-benar dikukuhkan sebagai standar operasional masa depan sistem.
4.  **Pengaturan Dependensi Modular:** Pertahankan pembersihan secara *native* via `pip uninstall fitz pymupdf && pip install PyMuPDF` bila ada perombakan atau penambahan *parser* baru guna menghindari jejak *shadow library*.

---

## Referensi
Daftar tautan spesifik dokumen Blueprint, Log, dan Final Report yang melahirkan laporan kompilasi ini:
*   [Parsing Benchmark Blueprint & Report](../Parsing-Benchmark/Report/Final_Report_Parsing_Benchmark.md)
*   [Chunking Benchmark Blueprint & Report](../Chunking-Benchmark/Report/Final_Report_Chunking_Benchmark.md)
*   [Retrieval Benchmark Blueprint & Report](../Retrieval-Benchmark/Report/Final_Report_Retrieval_Benchmark.md)
*   [Extraction Benchmark Blueprint & Report](../Extraction-Benchmark/Report/Final_Report_Extraction_Benchmark.md)
*   [Graph Benchmark Blueprint & Report](../benchmark-graph/Plan/Graph_Benchmark_Plan.md)