From 421d5098dbc72d0daab42a758dc5a4af0ff851f6 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sun, 25 Oct 2026 10:12:33 +0000 Subject: [PATCH] perf: optimize SQLAlchemy counting in debate outcomes Replaced `.count()` on the `ConversationMessage` query with `db.query(func.count(M.id)).scalar()`. This avoids the unnecessary SQL subquery wrapper generated by `.count()`, improving database query efficiency when calculating user turns in debates. Co-authored-by: Randomname653 <127677734+Randomname653@users.noreply.github.com> --- src/services/debate_outcome.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/services/debate_outcome.py b/src/services/debate_outcome.py index 608f1236..f2ae41b7 100644 --- a/src/services/debate_outcome.py +++ b/src/services/debate_outcome.py @@ -26,6 +26,8 @@ from datetime import datetime, timedelta from typing import Optional +from sqlalchemy import func + from src.database.connection import get_db_session logger = logging.getLogger(__name__) @@ -56,8 +58,10 @@ def user_turns(db, user_id: int, thread_id: Optional[str]) -> int: if not thread_id: return 0 from src.database.models import ConversationMessage as M - return (db.query(M).filter(M.user_id == user_id, M.thread_id == thread_id, - M.role == "user").count()) + # ⚡ Bolt: Use func.count() to avoid full ORM subquery overhead + return db.query(func.count(M.id)).filter(M.user_id == user_id, + M.thread_id == thread_id, + M.role == "user").scalar() def rule_persuader(outcome: str, resolution_type: str, turns: int,