77
88from open_webui .models .chat_messages import ChatMessages , ChatMessageModel
99from open_webui .models .chats import Chats
10+ from open_webui .models .groups import Groups
1011from open_webui .models .users import Users
1112from open_webui .models .feedbacks import Feedbacks
1213from open_webui .utils .auth import get_admin_user
@@ -56,12 +57,13 @@ class UserAnalyticsResponse(BaseModel):
5657async def get_model_analytics (
5758 start_date : Optional [int ] = Query (None , description = "Start timestamp (epoch)" ),
5859 end_date : Optional [int ] = Query (None , description = "End timestamp (epoch)" ),
60+ group_id : Optional [str ] = Query (None , description = "Filter by user group ID" ),
5961 user = Depends (get_admin_user ),
6062 db : Session = Depends (get_session ),
6163):
6264 """Get message counts per model."""
6365 counts = ChatMessages .get_message_count_by_model (
64- start_date = start_date , end_date = end_date , db = db
66+ start_date = start_date , end_date = end_date , group_id = group_id , db = db
6567 )
6668 models = [
6769 ModelAnalyticsEntry (model_id = model_id , count = count )
@@ -74,15 +76,14 @@ async def get_model_analytics(
7476async def get_user_analytics (
7577 start_date : Optional [int ] = Query (None , description = "Start timestamp (epoch)" ),
7678 end_date : Optional [int ] = Query (None , description = "End timestamp (epoch)" ),
79+ group_id : Optional [str ] = Query (None , description = "Filter by user group ID" ),
7780 limit : int = Query (50 , description = "Max users to return" ),
7881 user = Depends (get_admin_user ),
7982 db : Session = Depends (get_session ),
8083):
8184 """Get message counts and token usage per user with user info."""
82- from open_webui .models .users import Users
83-
8485 counts = ChatMessages .get_message_count_by_user (
85- start_date = start_date , end_date = end_date , db = db
86+ start_date = start_date , end_date = end_date , group_id = group_id , db = db
8687 )
8788 token_usage = ChatMessages .get_token_usage_by_user (
8889 start_date = start_date , end_date = end_date , db = db
@@ -153,18 +154,19 @@ class SummaryResponse(BaseModel):
153154async def get_summary (
154155 start_date : Optional [int ] = Query (None , description = "Start timestamp (epoch)" ),
155156 end_date : Optional [int ] = Query (None , description = "End timestamp (epoch)" ),
157+ group_id : Optional [str ] = Query (None , description = "Filter by user group ID" ),
156158 user = Depends (get_admin_user ),
157159 db : Session = Depends (get_session ),
158160):
159161 """Get summary statistics for the dashboard."""
160162 model_counts = ChatMessages .get_message_count_by_model (
161- start_date = start_date , end_date = end_date , db = db
163+ start_date = start_date , end_date = end_date , group_id = group_id , db = db
162164 )
163165 user_counts = ChatMessages .get_message_count_by_user (
164- start_date = start_date , end_date = end_date , db = db
166+ start_date = start_date , end_date = end_date , group_id = group_id , db = db
165167 )
166168 chat_counts = ChatMessages .get_message_count_by_chat (
167- start_date = start_date , end_date = end_date , db = db
169+ start_date = start_date , end_date = end_date , group_id = group_id , db = db
168170 )
169171
170172 return SummaryResponse (
@@ -188,6 +190,7 @@ class DailyStatsResponse(BaseModel):
188190async def get_daily_stats (
189191 start_date : Optional [int ] = Query (None , description = "Start timestamp (epoch)" ),
190192 end_date : Optional [int ] = Query (None , description = "End timestamp (epoch)" ),
193+ group_id : Optional [str ] = Query (None , description = "Filter by user group ID" ),
191194 granularity : str = Query ("daily" , description = "Granularity: 'hourly' or 'daily'" ),
192195 user = Depends (get_admin_user ),
193196 db : Session = Depends (get_session ),
@@ -199,7 +202,7 @@ async def get_daily_stats(
199202 )
200203 else :
201204 counts = ChatMessages .get_daily_message_counts_by_model (
202- start_date = start_date , end_date = end_date , db = db
205+ start_date = start_date , end_date = end_date , group_id = group_id , db = db
203206 )
204207 return DailyStatsResponse (
205208 data = [
@@ -228,12 +231,13 @@ class TokenUsageResponse(BaseModel):
228231async def get_token_usage (
229232 start_date : Optional [int ] = Query (None ),
230233 end_date : Optional [int ] = Query (None ),
234+ group_id : Optional [str ] = Query (None , description = "Filter by user group ID" ),
231235 user = Depends (get_admin_user ),
232236 db : Session = Depends (get_session ),
233237):
234238 """Get token usage aggregated by model."""
235239 usage = ChatMessages .get_token_usage_by_model (
236- start_date = start_date , end_date = end_date , db = db
240+ start_date = start_date , end_date = end_date , group_id = group_id , db = db
237241 )
238242
239243 models = [
0 commit comments