text: """
  Filters set the base query that gets passed to the storage adapter.
  """
  
  
  class Filter(object):
      """
      A base filter object from which all other
      filters should be subclassed.
      """
  
      def filter_selection(self, chatterbot, conversation_id):
          """
          Because this is the base filter class, this method just
          returns the storage adapter's base query. Other filters
          are expected to override this method.
          """
          return chatterbot.storage.base_query
  
  
  class RepetitiveResponseFilter(Filter):
      """
      A filter that eliminates possibly repetitive responses to prevent
      a chat bot from repeating statements that it has recently said.
      """
  
      def filter_selection(self, chatterbot, conversation_id):
  
          text_of_recent_responses = []
  
          # TODO: Add a larger quantity of response history
          latest_response = chatterbot.storage.get_latest_response(conversation_id)
          if latest_response:
              text_of_recent_responses.append(latest_response.text)
  
          # Return the query with no changes if there are no statements to exclude
          if not text_of_recent_responses:
              return super(RepetitiveResponseFilter, self).filter_selection(
                  chatterbot,
                  conversation_id
              )
  
          query = chatterbot.storage.base_query.statement_text_not_in(
              text_of_recent_responses
          )
  
          return query
  