diff --git a/backend/open_webui/models/chat_messages.py b/backend/open_webui/models/chat_messages.py index baa45ab603..7ccbba7a87 100644 --- a/backend/open_webui/models/chat_messages.py +++ b/backend/open_webui/models/chat_messages.py @@ -1012,12 +1012,15 @@ class ChatMessageTable: self, start_date: Optional[int] = None, end_date: Optional[int] = None, + group_id: Optional[str] = None, db: Optional[AsyncSession] = None, ) -> dict[str, dict[str, int]]: """Get message counts grouped by hour and model.""" async with get_async_db_context(db) as db: from datetime import datetime, timedelta + from open_webui.models.groups import GroupMember + stmt = select(ChatMessage.created_at, ChatMessage.model_id).filter( ChatMessage.role == 'assistant', ChatMessage.model_id.isnot(None), @@ -1027,6 +1030,9 @@ class ChatMessageTable: stmt = stmt.filter(ChatMessage.created_at >= start_date) if end_date: stmt = stmt.filter(ChatMessage.created_at <= end_date) + if group_id: + group_users = select(GroupMember.user_id).filter(GroupMember.group_id == group_id).scalar_subquery() + stmt = stmt.filter(ChatMessage.user_id.in_(group_users)) result = await db.execute(stmt) results = result.all() diff --git a/backend/open_webui/routers/analytics.py b/backend/open_webui/routers/analytics.py index d9cf8e0a61..7d57ab3262 100644 --- a/backend/open_webui/routers/analytics.py +++ b/backend/open_webui/routers/analytics.py @@ -207,7 +207,9 @@ async def get_daily_stats( ): """Get message counts grouped by model for time-series chart.""" if granularity == 'hourly': - counts = await ChatMessages.get_hourly_message_counts_by_model(start_date=start_date, end_date=end_date, db=db) + counts = await ChatMessages.get_hourly_message_counts_by_model( + start_date=start_date, end_date=end_date, group_id=group_id, db=db + ) else: counts = await ChatMessages.get_daily_message_counts_by_model( start_date=start_date, end_date=end_date, group_id=group_id, db=db