abstract base ai class