import streamlit as st
import json
import pandas as pd
from pathlib import Path
import plotly.express as px
st.title("📊 Metrics Dashboard")
log_dir = "./data/query_logs"
if not Path(log_dir).exists():
st.warning("No query logs found. Run some searches first!")
else:
# Load all logs
logs = []
for file in Path(log_dir).glob("*.jsonl"):
with open(file) as f:
for line in f:
logs.append(json.loads(line))
if logs:
df = pd.DataFrame(logs)
# Metrics
col1, col2, col3 = st.columns(3)
with col1:
st.metric("Total Queries", len(df))
with col2:
avg_latency = df['query_time_ms'].mean()
st.metric("Avg Latency", f"{avg_latency:.1f}ms")
with col3:
p95_latency = df['query_time_ms'].quantile(0.95)
st.metric("95th Percentile", f"{p95_latency:.1f}ms")
# Latency histogram
st.subheader("Query Latency Distribution")
fig = px.histogram(df, x='query_time_ms', nbins=20,
labels={'query_time_ms': 'Latency (ms)'})
st.plotly_chart(fig, use_container_width=True)
# Query history table
st.subheader("Query History")
display_df = df[['timestamp', 'query', 'query_time_ms', 'results_count', 'top_score']].copy()
display_df['timestamp'] = pd.to_datetime(display_df['timestamp']).dt.strftime('%Y-%m-%d %H:%M')
st.dataframe(display_df.sort_values('timestamp', ascending=False), use_container_width=True)
else:
st.info("No queries logged yet!")