Skip to content

Commit caf3362

Browse files
authored
fix: add missing group_id filter to analytics token usage query (open-webui#22167)
The get_token_usage_by_user query lacked group_id filtering, while the companion get_message_count_by_user query already supported it. When an admin filtered analytics by user group, message counts were correctly scoped to the group but token usage totals included data from all users. Add the group_id parameter and subquery filter to get_token_usage_by_user, matching the pattern used by get_message_count_by_user and other analytics queries, and pass group_id through from the analytics endpoint.
1 parent 3e95204 commit caf3362

2 files changed

Lines changed: 10 additions & 1 deletion

File tree

backend/open_webui/models/chat_messages.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,11 +420,13 @@ def get_token_usage_by_user(
420420
self,
421421
start_date: Optional[int] = None,
422422
end_date: Optional[int] = None,
423+
group_id: Optional[str] = None,
423424
db: Optional[Session] = None,
424425
) -> dict[str, dict]:
425426
"""Aggregate token usage by user using database-level aggregation."""
426427
with get_db_context(db) as db:
427428
from sqlalchemy import func, cast, Integer
429+
from open_webui.models.groups import GroupMember
428430

429431
dialect = db.bind.dialect.name
430432

@@ -464,6 +466,13 @@ def get_token_usage_by_user(
464466
query = query.filter(ChatMessage.created_at >= start_date)
465467
if end_date:
466468
query = query.filter(ChatMessage.created_at <= end_date)
469+
if group_id:
470+
group_users = (
471+
db.query(GroupMember.user_id)
472+
.filter(GroupMember.group_id == group_id)
473+
.subquery()
474+
)
475+
query = query.filter(ChatMessage.user_id.in_(group_users))
467476

468477
results = query.group_by(ChatMessage.user_id).all()
469478

backend/open_webui/routers/analytics.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ async def get_user_analytics(
8686
start_date=start_date, end_date=end_date, group_id=group_id, db=db
8787
)
8888
token_usage = ChatMessages.get_token_usage_by_user(
89-
start_date=start_date, end_date=end_date, db=db
89+
start_date=start_date, end_date=end_date, group_id=group_id, db=db
9090
)
9191

9292
# Get user info for top users

0 commit comments

Comments
 (0)