code: def _handle_message_read(self, event: Dict[str, Any]):
      # If the message was sent by another user (as in during a conversation)
      # then we need to propogate the read back to that user.
      reader = event["sender"]["id"]
      agent_state = self.get_agent_state(reader)
      if agent_state is None:
          return
      agent = agent_state.get_active_agent()
      if agent is not None:
          for partner in agent.message_partners:
              # We don't know who sent the message that was seen, but we can
              # send a message observed event to everyone else in the chat
              self.sender.send_read(partner.id)
  
imports: from abc import ABC, abstractmethod
  from asyncio import Future
  import copy
  import sys
  import logging
  import datetime
  import threading
  import time
  import traceback
  from typing import Dict, Any, Optional, List, Callable
  from parlai.chat_service.core.agents import ChatServiceAgent
  import parlai.chat_service.utils.logging
  import parlai.chat_service.utils.misc
  import parlai.chat_service.utils.server
  from parlai.chat_service.core.world_runner import ChatServiceWorldRunner
  from parlai.core.opt import Opt
label_desc: Use image node_id 14 for calling the ChatServiceManager obj's underlying member method code with example usage: obj._handle_message_read(event) without return types