|
8 | 8 | import logging |
9 | 9 | import time |
10 | 10 | from collections.abc import Awaitable, Callable |
| 11 | +from operator import itemgetter |
11 | 12 | from uuid import uuid4 |
12 | 13 |
|
13 | | -from mcp.server.streamableHttp import EventId, EventStore, StreamId |
| 14 | +from mcp.server.streamable_http import EventId, EventStore, StreamId |
14 | 15 | from mcp.types import JSONRPCMessage |
15 | 16 |
|
16 | 17 | logger = logging.getLogger(__name__) |
@@ -54,15 +55,19 @@ async def replay_events_after( |
54 | 55 | stream_id, _, last_timestamp = self.events[last_event_id] |
55 | 56 |
|
56 | 57 | # Find all events for this stream after the last event |
| 58 | + events_sorted = sorted( |
| 59 | + [ |
| 60 | + (event_id, message, timestamp) |
| 61 | + for event_id, (sid, message, timestamp) in self.events.items() |
| 62 | + if sid == stream_id and timestamp > last_timestamp |
| 63 | + ], |
| 64 | + key=itemgetter(2), |
| 65 | + ) |
| 66 | + |
57 | 67 | events_to_replay = [ |
58 | | - (event_id, message) |
59 | | - for event_id, (sid, message, timestamp) in self.events.items() |
60 | | - if sid == stream_id and timestamp > last_timestamp |
| 68 | + (event_id, message) for event_id, message, _ in events_sorted |
61 | 69 | ] |
62 | 70 |
|
63 | | - # Sort by timestamp to ensure chronological order |
64 | | - events_to_replay.sort(key=lambda x: self.events[x[0]][2]) |
65 | | - |
66 | 71 | logger.debug(f"Found {len(events_to_replay)} events to replay") |
67 | 72 | logger.debug( |
68 | 73 | f"Events to replay: {[event_id for event_id, _ in events_to_replay]}" |
|
0 commit comments