Fix infinite interrupt loop in gateway by consuming pending messages with .pop() and clearing interrupt events before recursion

- Added logic to clear the adapter's interrupt event to prevent infinite loops during message processing.
- Updated the get_pending_message method to pop messages from the pending queue, ensuring proper message handling.
This commit is contained in:
teknium
2026-02-11 00:05:30 +00:00
parent 62ba69a29d
commit a32ad1a656
2 changed files with 8 additions and 1 deletions

View File

@@ -286,7 +286,7 @@ class BasePlatformAdapter(ABC):
def get_pending_message(self, session_key: str) -> Optional[MessageEvent]:
"""Get and clear any pending message for a session."""
return self._pending_messages.get(session_key)
return self._pending_messages.pop(session_key, None)
def build_source(
self,

View File

@@ -572,6 +572,13 @@ class GatewayRunner:
if pending:
print(f"[gateway] 📨 Processing interrupted message: '{pending[:40]}...'")
# Clear the adapter's interrupt event so the next _run_agent call
# doesn't immediately re-trigger the interrupt before the new agent
# even makes its first API call (this was causing an infinite loop).
if adapter and hasattr(adapter, '_active_sessions') and source.chat_id in adapter._active_sessions:
adapter._active_sessions[source.chat_id].clear()
# Add an indicator to the response
if response:
response = response + "\n\n---\n_[Interrupted - processing your new message]_"