diff --git a/src/memos/mem_scheduler/base_scheduler.py b/src/memos/mem_scheduler/base_scheduler.py index 5720939e0..62e1d0242 100644 --- a/src/memos/mem_scheduler/base_scheduler.py +++ b/src/memos/mem_scheduler/base_scheduler.py @@ -785,7 +785,8 @@ def _message_consumer(self) -> None: if enqueue_epoch is not None: queue_wait_ms = max(0.0, now - enqueue_epoch) * 1000 - msg.dequeue_ts = now + # Avoid pydantic attribute enforcement + object.__setattr__(msg, "_dequeue_ts", now) emit_monitor_event( "dequeue", msg, diff --git a/src/memos/mem_scheduler/task_schedule_modules/dispatcher.py b/src/memos/mem_scheduler/task_schedule_modules/dispatcher.py index a2d01df6b..ade2bbfbf 100644 --- a/src/memos/mem_scheduler/task_schedule_modules/dispatcher.py +++ b/src/memos/mem_scheduler/task_schedule_modules/dispatcher.py @@ -166,7 +166,7 @@ def wrapped_handler(messages: list[ScheduleMessageItem]): wait_sec = max(0.0, now - enq_epoch) self.metrics.observe_task_wait_duration(wait_sec, m.user_id, m.label) - dequeue_ts = getattr(first_msg, "dequeue_ts", None) + dequeue_ts = getattr(first_msg, "_dequeue_ts", None) start_delay_ms = None if isinstance(dequeue_ts, int | float): start_delay_ms = max(0.0, start_time - dequeue_ts) * 1000