def __init__(self, db, logger, enable_debug=True):
        """
        Create a new instance of the chatbot application.

        >>> from database import Database
        >>> db = Database('sqlite:///:memory:')
        >>> bot = Chatbot(db, logging.getLogger())
        >>> response = bot.handle_input("Hi!")
        """
        self.prompt = '-> '
        self.creative_mode = False  # enables creative mode, temporarilly.
        # creative mode allows concurrent activity
        # between creative subgroup and lev1, lev2
        self.enable_debug = enable_debug
        self.db = db
        self.log = logger
        self.nlg = NaturalLanguageGenerator(logger.getChild('nlg'))
        self.nlu = NaturalLanguageUnderstander(0.5, logger.getChild('nlu'))
        self.dm = DialogueManager(db, logger.getChild('dm'))
        #
        self.creative_nlp = CreativeManager(db, logger.getChild('creative'),
                                            self.nlu, self.nlg, self.dm)
        #
        self.log.debug("Chatbot instantiated")
        self.last_bot_output = ""

        # Register the NLU messages we want
        self.nlu.register_message(YesNoMessage)
        self.nlu.register_message(SearchMessage)
        self.nlu.register_message(SystemMessage)
        startup(self.nlg)
import random
import types
import logging
import nlg 
from nlg import NaturalLanguageGenerator
from nlg import ContentPlanMessage as CPM
# from nlu.messages import SearchMessage, YesNoMessage, SystemMessage
# nlu = NaturalLanguageUnderstander(confidenceThreshold, logger)
# nlu = NaturalLanguageUnderstander(0.5, logger)
# dm = DialogueManager(db, logger.getChild('dm'))

logger = logging.getLogger()
nlg = NaturalLanguageGenerator(logger)

# from nlu.messages import SearchMessage, YesNoMessage, SystemMessage
#  def generate_response(self, content_plan_or_plans):
#  def handle_content_plan_message(self, content_plan):
#  def generate_recipe(self, recipe):
#  def generate(self, utter_type, keywords):
#  def acknowledge(self):
#  def affirm(self):
#  def decline(self):
#  def goodbye(self):
#  def unknown(self):
#  def clarify(self, keywords):
#  def summarize_query(self, query):
#  def specify_recipe(self, keywords):
#  def search_fail(self, keywords):
#  def search_related(self, keywords):
#  def advise(self):
#  def change_tone(self, tone):