Spaces:
Build error
Build error
| # utils/analytics.py | |
| import streamlit as st | |
| import pandas as pd | |
| import sqlite3 | |
| from typing import Dict, List | |
| from datetime import datetime, timedelta | |
| import plotly.express as px | |
| import plotly.graph_objects as go | |
| from utils.database import conn_lock | |
| def get_collection_analytics(conn: sqlite3.Connection) -> Dict: | |
| """Get analytics for collections and documents.""" | |
| analytics = {} | |
| # Most used collections | |
| cursor = conn.cursor() | |
| cursor.execute(""" | |
| SELECT | |
| c.name, | |
| COUNT(DISTINCT cm.chat_id) as usage_count | |
| FROM collections c | |
| LEFT JOIN chats ch ON c.id = ch.collection_id | |
| LEFT JOIN chat_messages cm ON ch.id = cm.chat_id | |
| GROUP BY c.id | |
| ORDER BY usage_count DESC | |
| LIMIT 5 | |
| """) | |
| analytics['top_collections'] = cursor.fetchall() | |
| # Most viewed documents | |
| cursor.execute(""" | |
| SELECT | |
| d.name, | |
| COUNT(q.id) as query_count | |
| FROM documents d | |
| LEFT JOIN queries q ON d.id = q.document_id | |
| GROUP BY d.id | |
| ORDER BY query_count DESC | |
| LIMIT 5 | |
| """) | |
| analytics['top_documents'] = cursor.fetchall() | |
| # Recent questions | |
| cursor.execute(""" | |
| SELECT DISTINCT query | |
| FROM queries | |
| ORDER BY query_date DESC | |
| LIMIT 5 | |
| """) | |
| analytics['recent_questions'] = cursor.fetchall() | |
| return analytics | |
| def display_analytics_dashboard(): | |
| """Display analytics dashboard.""" | |
| st.markdown("### 📊 Analytics Dashboard") | |
| analytics = get_collection_analytics(st.session_state.db_conn) | |
| col1, col2, col3 = st.columns(3) | |
| with col1: | |
| st.markdown("#### Top Collections") | |
| if analytics['top_collections']: | |
| chart_data = pd.DataFrame( | |
| analytics['top_collections'], | |
| columns=['Collection', 'Usage'] | |
| ) | |
| st.bar_chart(chart_data.set_index('Collection')) | |
| with col2: | |
| st.markdown("#### Most Viewed Documents") | |
| if analytics['top_documents']: | |
| for doc in analytics['top_documents']: | |
| st.metric(doc[0], f"{doc[1]} views") | |
| with col3: | |
| st.markdown("#### Recent Questions") | |
| if analytics['recent_questions']: | |
| for question in analytics['recent_questions']: | |
| st.write(f"• {question[0]}") |