class_docstr: The argilla dataset listener class
  
  Args:
      dataset: The dataset over which listener is created
      action: The action to execute when the condition is satisfied
      metrics: A list of metrics ids that will be required in condition
      query: The query string to apply
      query_params: Defined parameters used dynamically in the provided query
      condition: The condition to satisfy to execute the action
      query_records: If ``False``, the records won't be passed as argument to the action.
          Default: ``True``
      interval_in_seconds: How often the listener is executed. Default to 30 seconds
class_docstr_tok: ["The","argilla","dataset","listener","class","Args",":","dataset",":","The","dataset","over","which","listener","is","created","action",":","The","action","to","execute","when","the","condition","is","satisfied","metrics",":","A","list","of","metrics","ids","that","will","be","required","in","condition","query",":","The","query","string","to","apply","query_params",":","Defined","parameters","used","dynamically","in","the","provided","query","condition",":","The","condition","to","satisfy","to","execute","the","action","query_records",":","If","``","False","``",",","the","records","wo","n't","be","passed","as","argument","to","the","action",".","Default",":","``","True","``","interval_in_seconds",":","How","often","the","listener","is","executed",".","Default","to","30","seconds"]
docstr: Start listen to changes in the dataset. Additionally, args and kwargs can be passed to action
  by using the `action_*` arguments
  
  If the listener is already started, a ``ValueError`` will be raised
docstr_tok: ["Start","listen","to","changes","in","the","dataset",".","Additionally",",","args","and","kwargs","can","be","passed","to","action","by","using","the","`","action_","*","`","arguments","If","the","listener","is","already","started",",","a","``","ValueError","``","will","be","raised"]
code: def start(self, *action_args, **action_kwargs):
      """
      Start listen to changes in the dataset. Additionally, args and kwargs can be passed to action
      by using the `action_*` arguments
  
      If the listener is already started, a ``ValueError`` will be raised
  
      """
      if self.is_running():
          raise ValueError("Listener is already running")
  
      job_step = self.__catch_exceptions__(cancel_on_failure=True)(
          self.__listener_iteration_job__
      )
  
      self.__listener_job__ = self.__scheduler__.every(
          self.interval_in_seconds
      ).seconds.do(job_step, *action_args, **action_kwargs)
  
      class _ScheduleThread(threading.Thread):
          _WAIT_EVENT = threading.Event()
  
          _THREAD_LOGGER = logging.getLogger(__name__)
  
          @classmethod
          def run(cls):
              cls._THREAD_LOGGER.debug("Running listener thread...")
              while not cls._WAIT_EVENT.is_set():
                  self.__scheduler__.run_pending()
                  time.sleep(self.interval_in_seconds - 1)
              cls._THREAD_LOGGER.debug("Stopping listener thread...")
  
          @classmethod
          def stop(cls):
              cls._WAIT_EVENT.set()
  
      self.__current_thread__ = _ScheduleThread()
      self.__current_thread__.start()
  
imports: import copy
  import dataclasses
  import functools
  import logging
  import threading
  import time
  from typing import Any, Dict, List, Optional
  import schedule
  import argilla
  from argilla.client import singleton
  from argilla.client.sdk.commons.errors import NotFoundApiError
  from argilla.listeners.models import ListenerAction, ListenerCondition, Metrics, RGListenerContext, Search
label_desc: Use image node_id 6 for calling the RGDatasetListener obj's underlying member method code with example usage: obj.start() without return types