@@ -14,7 +14,7 @@ def __init__(self, session_id: str, debounce_seconds: int, message_delay_seconds
1414 self ._prompts : list [str ] = []
1515 self ._event = asyncio .Event ()
1616 self ._timer : asyncio .TimerHandle | None = None
17- self ._last_received_at : float | None = None
17+ self ._last_mentioned_at : float | None = None
1818 self ._running_task : asyncio .Task [None ] | None = None
1919 self ._loop = asyncio .get_running_loop ()
2020
@@ -23,11 +23,6 @@ async def _run(self, channel: BaseChannel) -> None:
2323 prompt = f"channel: ${ channel .output_channel } \n " + "\n " .join (self ._prompts )
2424 self ._prompts .clear ()
2525 self ._running_task = None
26- if (
27- self ._last_received_at is not None
28- and self ._loop .time () - self ._last_received_at > self .message_delay_seconds * 6
29- ):
30- self ._last_received_at = None
3126 try :
3227 result = await channel .run_prompt (self .session_id , prompt )
3328 await channel .process_output (self .session_id , result )
@@ -44,7 +39,10 @@ async def process_message(self, channel: BaseChannel, message: Any) -> None:
4439 is_mentioned = channel .is_mentioned (message )
4540 _ , prompt = await channel .get_session_prompt (message )
4641 now = self ._loop .time ()
47- if not is_mentioned and self ._last_received_at is None :
42+ if not is_mentioned and (
43+ self ._last_mentioned_at is None or now - self ._last_mentioned_at > self .message_delay_seconds * 6
44+ ):
45+ self ._last_mentioned_at = None
4846 logger .info ("session.receive ignored session_id={} message={}" , self .session_id , prompt )
4947 return
5048 self ._prompts .append (prompt )
@@ -57,13 +55,13 @@ async def process_message(self, channel: BaseChannel, message: Any) -> None:
5755 logger .exception ("session.run.error session_id={}" , self .session_id )
5856 elif is_mentioned :
5957 # wait at most 1 second to reply to mentioned messages.
60- self ._last_received_at = now
58+ self ._last_mentioned_at = now
6159 logger .info ("session.receive.mentioned session_id={} message={}" , self .session_id , prompt )
6260 self .reset_timer (self .debounce_seconds )
6361 if self ._running_task is None :
6462 self ._running_task = asyncio .create_task (self ._run (channel ))
6563 return await self ._running_task
66- elif self ._last_received_at is not None and self ._running_task is None :
64+ elif self ._last_mentioned_at is not None and self ._running_task is None :
6765 # Otherwise if bot is mentioned before, we will keep reading messages for at most 30 seconds.
6866 logger .info ("session.receive followup session_id={} message={}" , self .session_id , prompt )
6967 self .reset_timer (self .message_delay_seconds )
0 commit comments