code: def _end_stream_req(
      self, stream_info: "WatcherBase.StreamInfo", disable_stream: bool
  ):
      eval_return = stream_info.evaler.post(
          ended=True, continue_thread=not disable_stream
      )
      # TODO: check eval_return.is_valid ?
      # event_name = stream_info.req.event_name
      if disable_stream:
          stream_info.disabled = True
          utils.debug_log(
              "{} stream disabled".format(stream_info.req.stream_name),
              verbosity=1,
          )
  
      stream_item = StreamItem(
          value=eval_return.result,
          exception=eval_return.exception,
          ended=True,
      )
      stream_info.stream.write(stream_item)
  
imports: from typing import Dict, Any, Sequence
  from .lv_types import EventData, StreamItem, StreamCreateRequest, VisArgs
  from .evaler import Evaler
  from .stream import Stream
  from .stream_factory import StreamFactory
  from .filtered_stream import FilteredStream
  import uuid, time, functools
  from .None import utils
  from .notebook_maker import NotebookMaker
label_desc: Use image node_id 14 for calling the WatcherBase obj's underlying member method code with example usage: obj._end_stream_req(stream_info, disable_stream) without return types