diff --git a/core/session_manager.py b/core/session_manager.py index 3b82282e..60336f97 100644 --- a/core/session_manager.py +++ b/core/session_manager.py @@ -383,6 +383,10 @@ class SessionManager: cached = self.sessions[session_id] # Lazy hydrate: metadata-only entries get their messages on first read. if not cached.history: + logger.info( + "[ctx-diag] lazy hydrating session=%s (history empty, msg_count=%d)", + session_id, getattr(cached, "message_count", 0), + ) self._load_session_from_db(session_id) # Keep model/endpoint metadata fresh. Endpoint deletion can clear the diff --git a/routes/chat_helpers.py b/routes/chat_helpers.py index 57642900..465a92f0 100644 --- a/routes/chat_helpers.py +++ b/routes/chat_helpers.py @@ -751,7 +751,13 @@ async def build_chat_context( sess.model = norm # Build messages - messages = preface + sess.get_context_messages() + _ctx_msgs = sess.get_context_messages() + logger.info( + "[ctx-diag] session=%s history_len=%d ctx_messages=%d preface=%d roles=%s", + session_id, len(sess.history), len(_ctx_msgs), len(preface), + [m.get("role") for m in _ctx_msgs[-5:]] if _ctx_msgs else [], + ) + messages = preface + _ctx_msgs # Current date/time — injected as a standalone *user*-role context message # placed immediately before the latest user turn, NOT folded into the