Skip to content

Commit 4837f61

Browse files
authored
Merge pull request #102 from HeyBoY-ops/fix/websocket-event-loop-blocking
Fix event loop blocking in WebSocket session loading
2 parents 28462fe + 481ad18 commit 4837f61

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

chatbot-core/api/services/chat_service.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
RETRIEVER_AGENT_PROMPT,
1717
SPLIT_QUERY_PROMPT,
1818
)
19-
from api.services.memory import get_session
19+
20+
from api.services.memory import get_session, get_session_async
2021
from api.services.file_service import format_file_context
2122
from api.tools.tools import TOOL_REGISTRY
2223
from api.tools.utils import (
@@ -462,7 +463,8 @@ async def get_chatbot_reply_stream(
462463
logger.info("Streaming message from session '%s'", session_id)
463464
logger.info("Handling user query: %s", user_input)
464465

465-
memory = get_session(session_id)
466+
memory = await get_session_async(session_id)
467+
466468
if memory is None:
467469
raise RuntimeError(
468470
f"Session '{session_id}' not found in memory store.")

chatbot-core/api/services/memory.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Handles in-memory chat session state (conversation memory).
33
Provides utility functions for session lifecycle.
44
"""
5-
5+
import asyncio
66
import uuid
77
from datetime import datetime, timedelta
88
from threading import Lock
@@ -77,6 +77,12 @@ def get_session(session_id: str) -> ConversationBufferMemory | None:
7777

7878
return memory
7979

80+
async def get_session_async(session_id: str) -> ConversationBufferMemory | None:
81+
"""
82+
Async wrapper for get_session to prevent event loop blocking.
83+
"""
84+
return await asyncio.to_thread(get_session, session_id)
85+
8086

8187
def persist_session(session_id: str)-> None:
8288
"""

0 commit comments

Comments
 (0)