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.
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: truedi model aktif di-highlight - Sekarang: hanya sel key yang namanya cocok dengan
active_key_nameyang di-highlight hijau (emerald) - Header kolom key yang aktif menyala hijau + dot ping animasi
- Badge
⚡ API KEY Xmuncul 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.