docs: def chain_before(self, position, seps, start=0, predicate=None, index=None):
          """
          Retrieves a list of chained matches, before position, matching predicate and separated by characters from seps
          only.
          :param position:
          :type position:
          :param seps:
          :type seps:
          :param start:
          :type start:
          :param predicate:
          :type predicate:
          :param index:
          :type index:
          :return:
          :rtype:
          """
          if hasattr(position, 'start'):
              position = position.start
  
          chain = _BaseMatches._base()
          position = min(self.max_end, position)
  
          for i in reversed(range(start, position)):
              index_matches = self.at_index(i)
              filtered_matches = [index_match for index_match in index_matches if not predicate or predicate(index_match)]
              if filtered_matches:
                  for chain_match in filtered_matches:
                      if chain_match not in chain:
                          chain.append(chain_match)
              elif self.input_string[i] not in seps:
                  break
  
          return filter_index(chain, predicate, index)