95 lines
5.0 KiB
JSON
95 lines
5.0 KiB
JSON
{
|
|
"dashboard_title": "Model Extraction Quality",
|
|
"description": "Operational dashboard for monitoring Ollama extraction success rates, latency, validation failures, and confidence distributions.",
|
|
"slug": "model-extraction-quality",
|
|
"position_json": {
|
|
"HEADER_ID": {"id": "HEADER_ID", "type": "HEADER", "meta": {"text": "Model Extraction Quality"}},
|
|
"ROW-1": {
|
|
"type": "ROW",
|
|
"children": ["CHART-success-rate-kpi", "CHART-avg-latency-kpi", "CHART-avg-confidence-kpi", "CHART-retry-rate-kpi"]
|
|
},
|
|
"ROW-2": {
|
|
"type": "ROW",
|
|
"children": ["CHART-extraction-timeseries", "CHART-validation-status-pie"]
|
|
},
|
|
"ROW-3": {
|
|
"type": "ROW",
|
|
"children": ["CHART-latency-percentiles", "CHART-confidence-distribution"]
|
|
},
|
|
"ROW-4": {
|
|
"type": "ROW",
|
|
"children": ["CHART-recent-failures-table"]
|
|
}
|
|
},
|
|
"metadata": {
|
|
"refresh_frequency": 300,
|
|
"default_filters": "{}",
|
|
"color_scheme": "supersetColors"
|
|
},
|
|
"charts": [
|
|
{
|
|
"slice_name": "Extraction Success Rate",
|
|
"viz_type": "big_number_total",
|
|
"description": "Overall extraction success rate in the last 24h",
|
|
"datasource_type": "query",
|
|
"query": "SELECT ROUND(COUNT(*) FILTER (WHERE success)::numeric / NULLIF(COUNT(*), 0), 4) AS success_rate FROM model_performance_metrics WHERE recorded_at >= NOW() - INTERVAL '24 hours'"
|
|
},
|
|
{
|
|
"slice_name": "Avg Extraction Latency",
|
|
"viz_type": "big_number_total",
|
|
"description": "Average extraction duration in milliseconds",
|
|
"datasource_type": "query",
|
|
"query": "SELECT ROUND(AVG(total_duration_ms)::numeric, 0) AS avg_latency_ms FROM model_performance_metrics WHERE recorded_at >= NOW() - INTERVAL '24 hours'"
|
|
},
|
|
{
|
|
"slice_name": "Avg Confidence Score",
|
|
"viz_type": "big_number_total",
|
|
"description": "Average confidence of successful extractions",
|
|
"datasource_type": "query",
|
|
"query": "SELECT ROUND(AVG(confidence)::numeric, 3) AS avg_confidence FROM model_performance_metrics WHERE recorded_at >= NOW() - INTERVAL '24 hours' AND success = TRUE"
|
|
},
|
|
{
|
|
"slice_name": "Avg Retry Count",
|
|
"viz_type": "big_number_total",
|
|
"description": "Average retries per extraction attempt",
|
|
"datasource_type": "query",
|
|
"query": "SELECT ROUND(AVG(retry_count)::numeric, 2) AS avg_retries FROM model_performance_metrics WHERE recorded_at >= NOW() - INTERVAL '24 hours'"
|
|
},
|
|
{
|
|
"slice_name": "Extractions Over Time",
|
|
"viz_type": "echarts_timeseries_bar",
|
|
"description": "Hourly extraction counts split by success/failure",
|
|
"datasource_type": "query",
|
|
"query": "SELECT date_trunc('hour', recorded_at) AS bucket, COUNT(*) FILTER (WHERE success) AS successful, COUNT(*) FILTER (WHERE NOT success) AS failed FROM model_performance_metrics WHERE recorded_at >= NOW() - INTERVAL '24 hours' GROUP BY 1 ORDER BY 1"
|
|
},
|
|
{
|
|
"slice_name": "Validation Status Distribution",
|
|
"viz_type": "pie",
|
|
"description": "Breakdown of extraction validation outcomes",
|
|
"datasource_type": "query",
|
|
"query": "SELECT validation_status, COUNT(*) AS count FROM model_performance_metrics WHERE recorded_at >= NOW() - INTERVAL '24 hours' GROUP BY validation_status"
|
|
},
|
|
{
|
|
"slice_name": "Latency Percentiles Over Time",
|
|
"viz_type": "echarts_timeseries_line",
|
|
"description": "P50, P95, P99 extraction latency per hour",
|
|
"datasource_type": "query",
|
|
"query": "SELECT date_trunc('hour', recorded_at) AS bucket, ROUND(PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total_duration_ms)::numeric, 0) AS p50_ms, ROUND(PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY total_duration_ms)::numeric, 0) AS p95_ms, ROUND(PERCENTILE_CONT(0.99) WITHIN GROUP (ORDER BY total_duration_ms)::numeric, 0) AS p99_ms FROM model_performance_metrics WHERE recorded_at >= NOW() - INTERVAL '24 hours' GROUP BY 1 ORDER BY 1"
|
|
},
|
|
{
|
|
"slice_name": "Confidence Distribution",
|
|
"viz_type": "histogram",
|
|
"description": "Distribution of extraction confidence scores",
|
|
"datasource_type": "query",
|
|
"query": "SELECT CASE WHEN confidence >= 0.9 THEN '0.9-1.0' WHEN confidence >= 0.8 THEN '0.8-0.9' WHEN confidence >= 0.7 THEN '0.7-0.8' WHEN confidence >= 0.6 THEN '0.6-0.7' WHEN confidence >= 0.5 THEN '0.5-0.6' ELSE '<0.5' END AS confidence_bucket, COUNT(*) AS count FROM model_performance_metrics WHERE recorded_at >= NOW() - INTERVAL '24 hours' AND success = TRUE GROUP BY 1 ORDER BY 1"
|
|
},
|
|
{
|
|
"slice_name": "Recent Extraction Failures",
|
|
"viz_type": "table",
|
|
"description": "Most recent failed extractions with error details",
|
|
"datasource_type": "query",
|
|
"query": "SELECT mpm.ticker, mpm.model_name, mpm.validation_status, mpm.validation_error_count, mpm.attempt_count, mpm.total_duration_ms, mpm.recorded_at, d.title, d.document_type FROM model_performance_metrics mpm LEFT JOIN documents d ON d.id = mpm.document_id WHERE mpm.success = FALSE AND mpm.recorded_at >= NOW() - INTERVAL '24 hours' ORDER BY mpm.recorded_at DESC LIMIT 50"
|
|
}
|
|
]
|
|
}
|