Lanjut ke konten
Samkarsa Logbook

Fix OCR Date Regression and LLM Monitoring Logging

Resolves the 2025 date hallucination bug in OCR/transaction parser by fixing prompt injection logic. Updates LLM logging to omit static system prompts and prevent truncation.

1mnt baca

  1. Regresi Tanggal OCR/Transaksi (Hallucination): Muncul kembali masalah di mana sistem mengarang tanggal transaksi menjadi 2025-05-22 atau 22/05/2025 jika pengguna tidak menyebutkan tanggal secara eksplisit. Setelah diinvestigasi, ternyata terjadi regresi pada mcp-server/src/index.ts. Variabel today_date gagal disuntikkan ke prompt jika variabel konteks tambahan (pricing_rules atau coa) bernilai kosong karena berada di dalam blok if (sections.length > 0).
  2. Monitoring LLM Tidak Akurat: Penggunaan LLM Monitoring kurang nyaman karena prompt yang dilog menyertakan system prompt yang sangat panjang dan malah memotong prompt dinamis pengguna (batas 4000 karakter pada substring). Selain itu, endpoint generateVision (digunakan oleh OCR RAG) belum memanggil fungsi saveMcpLog, sehingga pemakaian token dan nama model (seperti gemini-3-flash-preview) luput dari pencatatan LLM Monitoring.

  • Memisahkan kondisional if (ctx.today_date) ke luar dari blok if (sections.length > 0) pada pendaftaran tool parse_transaction dan endpoint REST-nya.
  • Hasilnya, parameter today_date akan selalu terkirim ke LLM (Gemini) meskipun aplikasi klien tidak memberikan pricing_rules atau coa, sehingga LLM tidak lagi meraba-raba atau berhalusinasi mengarang tanggal dari tahun yang usang.

  • Penghapusan Truncation: Menghapus pemotongan .substring(0, 4000) untuk prompt dan .substring(0, 2000) untuk response di query SQL mcp_request_logs agar input/output yang sangat panjang tetap terekam secara utuh.
  • Dynamic Prompt Logging: Pada generateText, argumen prompt (yang hanya berisi input dinamis dari user) kini diteruskan ke saveMcpLog, alih-alih fullPrompt (yang berisi gabungan prompt statis ribuan karakter). Ini membuat list di dashboard LLM Monitoring jauh lebih bersih dan langsung to the point ke request pengguna.
  • Integrasi Vision Logging: Fungsi generateVision sekarang menghitung token (memanfaatkan response.usageMetadata) dan memanggil saveMcpLog untuk mencatat metriknya ke database, melengkapi monitoring untuk OCR.
  • Dukungan Model Modern: Array visionModels yang dirotasi secara otomatis kini menyertakan persis model yang didukung, termasuk gemini-3-flash-preview.