{% extends "base.html" %} {% block title %}Baza Wiedzy ZOPK - Panel Admina{% endblock %} {% block extra_css %} {% endblock %} {% block content %}
Ładowanie statystyk...

📋 Przegląd danych

🏆 Top 10 encji według wzmianek

Ładowanie encji...

⚡ Akcje

{% endblock %} {% block extra_js %} // Load stats on page load document.addEventListener('DOMContentLoaded', function() { loadStats(); }); async function loadStats() { try { const response = await fetch('/admin/zopk/knowledge/stats'); const data = await response.json(); if (data.success) { renderStats(data); renderTopEntities(data.top_entities || []); updatePipelineStatus(data); } else { document.getElementById('statsGrid').innerHTML = '
Błąd ładowania: ' + data.error + '
'; } } catch (error) { console.error('Error loading stats:', error); document.getElementById('statsGrid').innerHTML = '
Błąd połączenia
'; } } function renderStats(data) { const articles = data.articles || {}; const kb = data.knowledge_base || {}; const statsHtml = `
📄
${kb.total_chunks || 0}
Chunks
${kb.chunks_with_embeddings || 0} z embeddingami
📌
${kb.total_facts || 0}
Fakty
Wyekstraktowane informacje
🏢
${kb.total_entities || 0}
Encje
Firmy, osoby, miejsca
🔗
${kb.total_relations || 0}
Relacje
Powiązania między encjami
📰
${articles.extracted || 0}/${articles.scraped || 0}
Artykuły przetworzone
${articles.pending_extract || 0} oczekuje
🧲
${kb.chunks_with_embeddings || 0}/${kb.total_chunks || 0}
Embeddingi
${kb.chunks_without_embeddings || 0} do wygenerowania
`; document.getElementById('statsGrid').innerHTML = statsHtml; } function renderTopEntities(entities) { if (!entities.length) { document.getElementById('topEntities').innerHTML = '
Brak encji w bazie
'; return; } const html = entities.map(e => `
${e.type} ${e.name} ${e.mentions}×
`).join(''); document.getElementById('topEntities').innerHTML = html; } function updatePipelineStatus(data) { const articles = data.articles || {}; const kb = data.knowledge_base || {}; let status = 'success'; let text = 'Pipeline OK'; if (articles.pending_extract > 0) { status = 'running'; text = `${articles.pending_extract} artykułów czeka na ekstrakcję`; } else if (kb.chunks_without_embeddings > 0) { status = 'running'; text = `${kb.chunks_without_embeddings} chunków bez embeddingów`; } document.getElementById('pipelineStatus').className = 'pipeline-status ' + status; document.getElementById('pipelineStatus').innerHTML = ` ${status === 'success' ? '✅' : '⏳'} ${text} `; } async function runExtraction() { if (!confirm('Uruchomić ekstrakcję wiedzy z artykułów?')) return; try { const response = await fetch('/admin/zopk/knowledge/extract', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': '{{ csrf_token() }}' }, body: JSON.stringify({ limit: 50 }) }); const data = await response.json(); alert(data.message || data.error); loadStats(); } catch (error) { alert('Błąd: ' + error.message); } } async function generateEmbeddings() { if (!confirm('Wygenerować embeddingi dla chunków?')) return; try { const response = await fetch('/admin/zopk/knowledge/embeddings', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': '{{ csrf_token() }}' }, body: JSON.stringify({ limit: 100 }) }); const data = await response.json(); alert(data.message || data.error); loadStats(); } catch (error) { alert('Błąd: ' + error.message); } } {% endblock %}