Lanjut ke konten
Samkarsa Logbook

v1.0.0-010 : LLM Request Logging & Penyempurnaan Monitoring Dashboard

Implementasi pencatatan otomatis setiap pemanggilan LLM (prompt, model, token) ke tabel mcp_request_logs di mcp_hub_db. Penyempurnaan dashboard monitoring: highlight hanya key aktif, filter rule_based, dan popover prompt yang proporsional.

MCP2mnt baca

Iterasi lanjutan dari fitur LLM Monitoring (v1.0.0-009). Pada versi sebelumnya log dibaca dari blonjo_db (data transaksi). Versi ini memindahkan sumber log ke mcp_request_logs yang baru — tabel khusus di mcp_hub_db yang mencatat setiap pemanggilan LLM langsung dari titik eksekusi di MCP Server.


Pencatatan Otomatis (Non-Blocking)

Setiap panggilan generateText() yang berhasil kini mencatat log ke tabel mcp_request_logs secara asinkron (tidak memblokir response ke client):

await logPool.query(
`INSERT INTO mcp_request_logs (prompt, response, model_used, token_in, token_out, tool_name)
VALUES ($1, $2, $3, $4, $5, $6)`,
[prompt, response, modelName, tokenIn, tokenOut, toolName]
);

Token yang Dicatat (Real Data)

Provider Sumber Token In Sumber Token Out
Gemini API response.usageMetadata.promptTokenCount response.usageMetadata.candidatesTokenCount
Ollama Local response.data.prompt_eval_count response.data.eval_count
Ollama Ngrok response.data.prompt_eval_count response.data.eval_count
Fallback Math.ceil(text.length / 4) Math.ceil(text.length / 4)

Auto-Create Tabel

Tabel mcp_request_logs dibuat otomatis saat service pertama kali startup jika belum ada:

CREATE TABLE IF NOT EXISTS mcp_request_logs (
id SERIAL PRIMARY KEY,
prompt TEXT,
response TEXT,
model_used VARCHAR(100),
token_in INT,
token_out INT,
tool_name VARCHAR(100),
created_at TIMESTAMPTZ DEFAULT NOW()
)

Deteksi Key Aktif (active_key_name)

Endpoint kini menentukan key mana yang benar-benar sedang digunakan dengan cara tes ping satu per satu ke API Gemini pada model aktif. Key pertama yang merespons = active_key_name:

for (const key of keys) {
const url = `https://generativelanguage.googleapis.com/v1beta/models/${active_llm_model}?key=${key.val}`;
try {
await axios.get(url, { timeout: 2000 });
active_key_name = key.name; // key pertama yang berhasil = key aktif
break;
} catch (e) {}
}

Sumber Log Dipindah

Log history kini dibaca dari mcp_request_logs di mcp_hub_db (bukan dari blonjo_db). Filter rule_based otomatis tidak muncul karena tabel ini hanya berisi log dari LLM yang sebenarnya.

Model List dari Env

Daftar model yang ditampilkan di matrix kini mengikuti GEMINI_GEN_MODELS dari .env — tidak lagi hardcode 5 model.


Highlight Key Aktif (Akurat)

  • Sebelumnya: semua key yang supported: true di model aktif di-highlight
  • Sekarang: hanya sel key yang namanya cocok dengan active_key_name yang di-highlight hijau (emerald)
  • Header kolom key yang aktif menyala hijau + dot ping animasi
  • Badge ⚡ API KEY X muncul di judul tabel matrix

Kolom Log Diperbarui

Kolom Sebelum Sesudah
Pemroses processor (dari blonjo_db) model_used (nama model real)
Token In Sering 0 / kosong Nilai real dari mcp_request_logs
Token Out Sering 0 / kosong Nilai real dari mcp_request_logs
Total Selalu 0 jika token null Tampil - jika null

Popover Proporsional

Lebar popover diubah dari max-w-sm menjadi w-[480px] max-w-[90vw] dengan area scroll max-h-72. Header popover menampilkan nama model yang memproses.