# Log Eksekusi Optimasi Performa - Fase 2 (LLM Refactor)

## Tanggal Eksekusi
4 Mei 2026

## Deskripsi Eksekusi
Telah dilakukan eksekusi Fase 2 berdasarkan dokumen rencana `ingestion_performance_plan.md`. Fase ini memfokuskan pada pembenahan interaksi dengan LLM (OpenRouter/DashScope) untuk menekan jumlah pemanggilan API secara drastis melalui metode *Prompt Batching*, serta menambahkan perlindungan jaringan melalui mekanisme *Retry with Exponential Backoff*.

## Langkah yang Dilakukan
1. **LLM Retry Mechanism**:
   - Menambahkan blok *try-except* berlapis dengan _loop_ `for retry_attempt in range(max_retries)` pada fungsi `extract_pillars_with_llm` dan `embed_text`.
   - Jika API melempar *error* atau *timeout*, sistem tidak langsung menyerah melainkan menunggu dengan durasi yang semakin lama (_exponential backoff_ dengan perhitungan `2^attempt + jitter`).
   - Kapasitas retri maksimal dibatasi hingga 3 kali percobaan sebelum melempar *error* total.

2. **Prompt Batching Edge Reasoning**:
   - Merombak ulang fungsi `generate_edge_reasoning` yang sebelumnya hanya menerima satu pasang _excerpt_ untuk satu pilar. Kini fungsi tersebut menerima `dict` dari beberapa pilar yang memiliki kemiripan (*misal: Background dan Gap sekaligus*).
   - Menyusun _prompt_ tunggal yang meminta LLM menilai seluruh pilar-pilar tersebut dalam satu kali respons.
   - Mengubah parameter `response_format` pada permintaan OpenAI (DashScope) agar selalu mengembalikan JSON murni dengan pola format terstruktur: `{ "nama_pilar": "alasan kemiripan..." }`.
   - Mengganti alur di dalam *Worker Thread* (`worker_edge_generator`) sehingga saat ia menemukan target kandidat jurnal yang mirip pada 3 pilar, alih-alih mengirim 3 panggilan API berbeda yang sekuensial, *worker* merangkum ketiga pilar tersebut ke dalam satu kamus (`dict`), menembak API LLM 1 kali, dan mengekstraksi respons JSON-nya.

## Acceptance Criteria yang Terpenuhi
- LLM kini hanya dipanggil tepat 1 kali per setiap pasangan jurnal kandidat yang lolos *Coherence Gate*.
- Kegagalan LLM sesaat (contoh: *timeout* jaringan) tidak lagi langsung menggagalkan *pipeline*, melainkan diretri dengan tenang sebelum melanjutkan kembali operasi.
- Waktu proses komputasi generasi relasi *Edge* antar jurnal secara eksponensial menjadi jauh lebih cepat dan irit _bandwidth_.

## Status
Fase 2 dieksekusi dengan sukses.
