{"record":{"id":"6d3bae5d8415ee2e","repo":"HKUDS/nanobot","slug":"session-message-rate-limit-reached-self-max-mes","errorCode":null,"errorMessage":"session message rate limit reached ({self._max_messages_per_minute}/minute)","messagePattern":"session message rate limit reached \\((.+?)/minute\\)","errorType":"exception","errorClass":"SessionMessageError","httpStatus":null,"severity":"error","filePath":"nanobot/agent/tools/session_messages.py","lineNumber":248,"sourceCode":"        envelope: SessionMessageEnvelope = {\n            \"message_id\": uuid4().hex,\n            \"created_at_ms\": int(time.time() * 1000),\n            \"expect_reply\": expect_reply,\n            \"source_handle\": source.name,\n            \"source_session_key\": source.session_key,\n            \"target_session_key\": target.session_key,\n        }\n        reverse_wait_key = (target.session_key, source.session_key)\n        wait_key = (source.session_key, target.session_key)\n\n        async with self._send_lock:\n            now = self._clock()\n            sent_at = self._sent_at.setdefault(source.session_key, deque())\n            cutoff = now - _RATE_LIMIT_WINDOW_SECONDS\n            while sent_at and sent_at[0] <= cutoff:\n                sent_at.popleft()\n            if len(sent_at) >= self._max_messages_per_minute:\n                raise SessionMessageError(\n                    f\"session message rate limit reached ({self._max_messages_per_minute}/minute)\",\n                )\n\n            await self._bus.publish_inbound(InboundMessage(\n                channel=\"system\",\n                sender_id=\"session\",\n                chat_id=target.session_key,\n                content=content,\n                metadata={SESSION_MESSAGE_METADATA_KEY: envelope},\n                session_key_override=target.session_key,\n                input_role=\"user\",\n            ))\n            sent_at.append(now)\n            self._cancel_pending_reply(reverse_wait_key)\n            if timeout_seconds is not None:\n                self._cancel_pending_reply(wait_key)\n                self._schedule_pending_reply(\n                    wait_key,","sourceCodeStart":230,"sourceCodeEnd":266,"githubUrl":"https://github.com/HKUDS/nanobot/blob/42f37dc4c0e409eac7818a82d165c5f2757bc075/nanobot/agent/tools/session_messages.py#L230-L266","documentation":"Error \"session message rate limit reached ({self._max_messages_per_minute}/minute)\" thrown in HKUDS/nanobot.","triggerScenarios":"Thrown at nanobot/agent/tools/session_messages.py:248 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"42f37dc4c0e409eac7818a82d165c5f2757bc075","analyzedAt":"2026-08-26T00:18:52.276Z","schemaVersion":2},"datasetVersion":"2026-08-26T04:18:47.238Z"}