Merge PR #823: prevent duplicate memory consolidation tasks per session
This commit is contained in:
@@ -89,6 +89,7 @@ class AgentLoop:
|
|||||||
self._mcp_servers = mcp_servers or {}
|
self._mcp_servers = mcp_servers or {}
|
||||||
self._mcp_stack: AsyncExitStack | None = None
|
self._mcp_stack: AsyncExitStack | None = None
|
||||||
self._mcp_connected = False
|
self._mcp_connected = False
|
||||||
|
self._consolidating: set[str] = set() # Session keys with consolidation in progress
|
||||||
self._register_default_tools()
|
self._register_default_tools()
|
||||||
|
|
||||||
def _register_default_tools(self) -> None:
|
def _register_default_tools(self) -> None:
|
||||||
@@ -330,8 +331,16 @@ class AgentLoop:
|
|||||||
return OutboundMessage(channel=msg.channel, chat_id=msg.chat_id,
|
return OutboundMessage(channel=msg.channel, chat_id=msg.chat_id,
|
||||||
content="🐈 nanobot commands:\n/new — Start a new conversation\n/help — Show available commands")
|
content="🐈 nanobot commands:\n/new — Start a new conversation\n/help — Show available commands")
|
||||||
|
|
||||||
if len(session.messages) > self.memory_window:
|
if len(session.messages) > self.memory_window and session.key not in self._consolidating:
|
||||||
asyncio.create_task(self._consolidate_memory(session))
|
self._consolidating.add(session.key)
|
||||||
|
|
||||||
|
async def _consolidate_and_unlock():
|
||||||
|
try:
|
||||||
|
await self._consolidate_memory(session)
|
||||||
|
finally:
|
||||||
|
self._consolidating.discard(session.key)
|
||||||
|
|
||||||
|
asyncio.create_task(_consolidate_and_unlock())
|
||||||
|
|
||||||
self._set_tool_context(msg.channel, msg.chat_id)
|
self._set_tool_context(msg.channel, msg.chat_id)
|
||||||
initial_messages = self.context.build_messages(
|
initial_messages = self.context.build_messages(
|
||||||
|
|||||||
Reference in New Issue
Block a user